Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Połączenie stałych IN_* (jeden warunek jest z negacją)


Najlepsza odpowiedź 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. Przejdź do postu


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
7 odpowiedzi w tym temacie

#1 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 20.06.2015 17:47

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...


  • +
  • -
  • 0

#2 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 981
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Online

Napisano 20.06.2015 19:23

Ale po co skoro masz już warunek :D


  • +
  • -
  • 0

#3 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 20.06.2015 19:27

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 :X


  • +
  • -
  • 0

#4 Asiap

    Wszechpomocny

  • Girl

Reputacja: 171
Profesjonalista

  • Postów:323
  • Lokalizacja:Kętrzyn
Offline

Napisano 20.06.2015 19:57

if(buttons & (IN_RELOAD|IN_ATTACK))

  • +
  • -
  • -1

#5 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 20.06.2015 20:51

Przeczytaj pierwszy post...
  • +
  • -
  • 0

#6 Asiap

    Wszechpomocny

  • Girl

Reputacja: 171
Profesjonalista

  • Postów:323
  • Lokalizacja:Kętrzyn
Offline

Napisano 20.06.2015 21:52

if(buttons & (IN_RELOAD|~IN_ATTACK))

  • +
  • -
  • 0

#7 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 21.06.2015 14:02   Najlepsza odpowiedź

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.
GwynBleidD (21.06.2015 14:05):
Tej metody można użyć do dowolnej kombinacji przycisków lub innych flag (np flag admina). W pierwszym nawiasie wypisujemy wszystkie flagi, które sprawdzamy (bez ich negacji), w drugim wypisujemy jaki ma być stan tych flag gdy warunek jest spełniony. Drugi nawias zaczyna się trochę komplikować jeśli klika przycisków ma być wciśniętych, a kilka nie, bo musimy zamiennie używać & i |

  • +
  • -
  • 2

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#8 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 21.06.2015 15:01

Dzięki Gwyn, nie mogłem wymyślić sposobu, o to mi chodziło
  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych