Jump to content


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

Posted Image Posted Image

Guest Message by DevFuse
 

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


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


  • You cannot start a new topic
  • You cannot reply to this topic
7 replies to this topic

#1 Rivit

    Godlike

  • Support Team

  • Reputacja: 1,319
    Godlike

  • Postów:4,381
Offline

Posted 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,559
    Godlike

  • Postów:11,989
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Posted 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,381
Offline

Posted 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

Posted 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,381
Offline

Posted 20.06.2015 20:51

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

#6 Asiap

    Wszechpomocny

  • Girl

  • Reputacja: 171
    Profesjonalista

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

Posted 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

Posted 21.06.2015 14:02   Best Answer

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,381
Offline

Posted 21.06.2015 15:01

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




  


1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users

Coinsy CSGOPolygon Za SMS, PSC , Przelew - CoinSell.pro
Skiny do CS:GO za SMS, PSC, Przelew - CSGOPaka.com
Automatyczny Bot Levelowania Steam - LVLUPSteam.com
CSGO Gambling Sites and Free Betting Codes - DreamCodes.gg

Sign In