Połączenie stałych IN_* (jeden warunek jes...
Best Answer GwynBleidD 21.06.2015 14:02
if(buttons & (IN_RELOAD|~IN_ATTACK))
Nope, nie zadziała...
Załóżmy że IN_RELOAD to zaświecony bit 1, a IN_ATTACK to 2, czyli:
IN_RELOAD = 0b00000001 IN_ATTACK = 0b00000010 // dalej: ~IN_ATTACK = 0b11111101 IN_RELOAD|~IN_ATTACK = 0b11111101 // czyli dokładnie to samo, co samo ~IN_ATTACK!Wynik? Sprawdzimy czy jest wciśnięty jakikolwiek przycisk prócz IN_ATTACK, więc jeśli wciśniemy np stzałkę w przud, use, reload, cokolwiek innego... Również gdy razem z tymi przyciskami wciśniemy IN_ATTACK!
IN_RELOAD | IN_ATTACK = 0b00000011 IN_RELOAD & ~IN_ATTACK = 0b00000001 if (buttons & (IN_RELOAD | IN_ATTACK) == (IN_RELOAD & ~IN_ATTACK))Wynik? Najpierw wygaszamy wszystkie bity które nie dotyczą naszych 2ch przycisków, czyli dostajemy 4 możliwe kombinacje:
0b00000011, 0b00000010, 0b00000001, 0b00000000
Następnie porównujemy to do stanu, który nas interesuje, czyli wciśnięty IN_RELOAD i NIE wciśnięty IN_ATTACK.
Prostszej metody bez 2ch porównań nie ma, lepiej jest w tym przypadku zrobić 2 warunki. Jeśli chcemy sprawdzić 3 przyciski to już się opłaca użyć tej metody. Go to the full post
Rivit
20.06.2015
Witam,
pytanie z cyklu: "autor to ***** i nie może sobie poradzić"
if(buttons & IN_RELOAD && !(buttons & IN_ATTACK))
Jak to zastąpić jednym sprawdzeniem?
Gdyby nie negacja użyłbym sumy bitowej...
Rivit
20.06.2015
Pytam z ciekawości, próbuję zrobić coś czego nie potrafię, a chcę umieć...
jak zrobić żeby było
if(buttons & (IN_RELOAD [...] IN_ATTACK)) //zeby to zsumowac i bylo jako jedno
No wiesz o co chodzi
Best Answer
GwynBleidD
21.06.2015
if(buttons & (IN_RELOAD|~IN_ATTACK))
Nope, nie zadziała...
Załóżmy że IN_RELOAD to zaświecony bit 1, a IN_ATTACK to 2, czyli:
IN_RELOAD = 0b00000001 IN_ATTACK = 0b00000010 // dalej: ~IN_ATTACK = 0b11111101 IN_RELOAD|~IN_ATTACK = 0b11111101 // czyli dokładnie to samo, co samo ~IN_ATTACK!Wynik? Sprawdzimy czy jest wciśnięty jakikolwiek przycisk prócz IN_ATTACK, więc jeśli wciśniemy np stzałkę w przud, use, reload, cokolwiek innego... Również gdy razem z tymi przyciskami wciśniemy IN_ATTACK!
IN_RELOAD | IN_ATTACK = 0b00000011 IN_RELOAD & ~IN_ATTACK = 0b00000001 if (buttons & (IN_RELOAD | IN_ATTACK) == (IN_RELOAD & ~IN_ATTACK))Wynik? Najpierw wygaszamy wszystkie bity które nie dotyczą naszych 2ch przycisków, czyli dostajemy 4 możliwe kombinacje:
0b00000011, 0b00000010, 0b00000001, 0b00000000
Następnie porównujemy to do stanu, który nas interesuje, czyli wciśnięty IN_RELOAD i NIE wciśnięty IN_ATTACK.
Prostszej metody bez 2ch porównań nie ma, lepiej jest w tym przypadku zrobić 2 warunki. Jeśli chcemy sprawdzić 3 przyciski to już się opłaca użyć tej metody.