Aktywne Wpisy

WezelGordyjski +59
Kocham życie singla! Chcę ekran projekcyjny, to go sobie maluję na ścianie! Żadnych kłótni o niszczenie salonu. A w szafce czekają już chipsy i batony ( ͡° ͜ʖ ͡°)

Runaway28 +20
#przegryw chuop na kolację zrobił sobie steka z pieczonymi ziemniakami i brokułami na parze( ͡° ͜ʖ ͡°)
![[AMA] Paweł Fajdek, pięciokrotny mistrz świata w rzucie młotem](https://wykop.pl/cdn/c0834752/cb6c48282d3c4c70261f8afb5f9fa77e36d122724502ac5937f39f268d049939,q70.jpg)




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
Wywoływanie za każdym razem IFa czy Switcha wydaje mi się jakieś takie... mało wydajne.
Czyli mam sobie ten wskaźnik STATE i dwa przyciski z tym samym skryptem który po naciśnięciu robi to:
STATE = !STATE;
Czyli przełącza stan. Tylko że w jednym przycisku do tego wskaźnika przypisuję jakąś tam skądś wartość X, i ten przycisk zmienia JĄ, a w innym przycisku przypisuję wartość Y i ten zmienia JĄ. I mogę zrobić milion
np.
bool Invert(bool &dupa) { return !dupa; }Jeśli nie chcesz wykonywać tego w sposób
Invert(controls), możesz stworzyć sobie tablice typu boolean, w niej trzymać te wszystkie bule, iterowane enumem.Wtedy do metody invert przekazywałbyś tylko enuma lajk dis:
bool Invert(enum dupa) {return !tablicabuli[dupa]; }Jeśli masz to ładnie w klasach, to możesz przekazywać tylko wskaźnik na miejsce w tablicy buli, do tego metoda
mam sobie skrypt Settings i w nim:
public static bool inputMethod;public static bool mouseInvert;
public static bool doubleClick;
i potem mam sobie przyciski na których siedzi skrypt Button i w nim mniej więcej:
public byte buttonType;
void OnClick(){
Switch(buttonType){
case 0:
settings.inputMethod = !settings.InputMethod;
break;
case 1:
settings.mouseInvert= !settings.mouseInvert;
break;
case 2:
settings.doubleClick= !settings.doubleClick;
break;
}
}
http://gameprogrammingpatterns.com/state.html
Aha, jeśli środowisko się przyczepi o enuma jako indeks tablicy, to go zcastuj.
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!
A co do zastępowania tych moich boolów tablicą to jakoś nie jestem przekonany. Wtedy zamiast się odwołać:
if(settings.mouseInverted) something;musiałbym wołać:
if(settings.tablicaBuli[mouseInverted]) something;Czyli więcej/trudniej a korzyści jako takiej nie ma z tego że zamiast oddzielnie te ustawienia w swoich