Wpis z mikrobloga

#programowanie #gamedev #csharp

Mirki, mam problem. Chyba dosyć błahy ale jakoś nie ogarniam.

Dajmy na to mam sobie skrypt w którym mam jakieś tam 3 boole:

bool controls = true;
bool zoom = false;
bool active = true;

i mam trzy obiekty z takim samym skryptem X którym chcę korzystać z tych booli, ale w którym mam IFa który na podstawie swojej jakiejś tam zmiennej oznaczającej korzysta z danego boola. np.

if(name == controlsObject)
controls = !controls;
else if (name == zoomObject)
zoom = !zoom;
else
active = !active;

No i ok. Takie coś zadziała. Ale dajmy na to że chcę często korzystać z tych opcji i takie IFowanie częste jest nieładne. Więc robię w każdym obiekcie boola STATE i coś takiego:

if(name == controlsObject)
STATE = controls;
else if (name == zoomObject)
STATE = zoom;
else
STATE = active;

i wtedy już nie wołam za każdym razem IFa żeby rozstrzygnąć jaki to przycisk tylko cokolwiek robię to operuję na STATE a ten już działa na tej wartości którą mu przypisałem.

JAK TO ZROBIĆ?!

Pierwsze co mi przyszło do głowy to REF, ale REF działa inaczej. Jak zrobić taki odnośnik? Taką referencję jakby? Jak dany przycisk nazywa się jakoś to zmienna STATE odpowiada za coś tam i wtedy operując już na tej zmiennej STATE każdy przycisk sobie indywidualnie zmienia co innego.

Wydaje się głupio błaha sprawa a nie mogę ogarnąć. o.O
  • 22
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Noct: A nie ma czegoś takiego w C# żeby po prostu w zrobić odnośnik do jakiejś zmiennej? Coś jak znaczniki w C. Robię taki znacznik. W zależności od tego co chcę kontrolować przypisuję mu co innego i dalej operuję na tym znaczniku?
Wywoływanie za każdym razem IFa czy Switcha wydaje mi się jakieś takie... mało wydajne.
  • Odpowiedz
@Nicarim: no no.Kurde. Poplątało mi się. Właśnie jak wskaźnik w C. Żeby sobie zrobić referencję do jakiejś zmiennej i operować na tej referencji.
  • Odpowiedz
@Nicarim: nie nie. To nie to. Chodziło mi dokładnie o taką analogię wskaźnika.

Czyli mam sobie ten wskaźnik STATE i dwa przyciski z tym samym skryptem który po naciśnięciu robi to:

STATE =
  • Odpowiedz
@Noct: oj ja to z tymi enumami to niedobrze żyję :D Nie no po prostu zrobię tak jak miałem, czyli akcję będę rozdzielał IF/Switchem . Myślałem że da się to zrobić prościej, robiąc raz IF/Switchem jakiś wskaźnik i później działać na nim ale jak się nie da prosto tego zrobić to IF/Switch też będzie dobrze latał.
  • Odpowiedz
@Curry_: No to mówię, zrób tablicę, pomijasz tym te Twoje ify, moim zdaniem to lepsze rozwiązanie. Jak booli przybędzie, to tyłek boleć będzie. A tak, możesz potem nawet automatycznie dodać następnego do tablicy.

  • Odpowiedz
@Noct: hmm... to chyba czegoś nie rozumiem. Dokładnie u mnie to jest tak:

mam sobie skrypt Settings i w nim:

public static bool inputMethod;
public static
  • Odpowiedz
@regis3: nie nie. To nie to. U mnie chodzi o zwykłe toggle switch boolów. To o czym pisze to po prostu zmienianie różnych zmiennych wykonując operacje na jakimś tam wskaźniku który odnosi się do różnych zmiennych.
  • Odpowiedz
@Noct: Ah, o to chodzi z tą tablicą. A to u mnie nie przejdzie. Ja robię to co wyżej napisałem. To jest skrypt przycisku który ma togglować boola, zmieniać dane ustawienie czegoś. Już mam te boole w skrypcie Settings i ponazywane są tak żeby je łatwo ogarniać np. settings.mouseInverted. Więc robienie drugiej tablicy dublującej te boole w każdym przycisku mija się z celem. Jak nie ma sensownej alternatywy dla wskaźników
  • Odpowiedz
@Curry_: To, co Ci przedstawiłem właśnie to robi. Nie dubluj, tylko zastąp. Zamiast jednego boola, używasz jednego boola, który jest elementem tablicy. Sprytnie, nie? ( )
A do nazw łatwych do ogarnięcia jest właśnie enum, będący jednocześnie iteratorem. Jak nie potrzebujesz tego teraz, to będziesz później. Potwierdzone info, niestety. Powodzenia!
  • Odpowiedz
@Noct: no enumy się przydają to fakt. Ja to w sumie ich nie używam bo zawsze mi się wydaje że bardziej utrudnią niż ulepszą, ale muszę wyrobić sobie nawyk używania ich.

A co do zastępowania tych moich boolów tablicą to jakoś nie jestem przekonany. Wtedy zamiast się odwołać:

if(settings.mouseInverted) something;
  • Odpowiedz
@Noct: ej, ale to co mu napisałeś jest fest nieczytelne na pierwszy rzut oka. ale fajne. zapamiętam, bo akurat czuję, że mi się przyda pisząc obecnie jednego klienta do sterownika ^^
  • Odpowiedz