• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ Builder - klawisze specjalne

Object Storage Arubacloud
0 głosów
544 wizyt
pytanie zadane 7 stycznia 2021 w C i C++ przez Bartek030 Obywatel (1,460 p.)

Witam,

Chciałem prosić o pomoc z drobnym problemem. Tworzę małą grę za pomocą C++ Builder, podczas której rywalizuje ze sobą dwóch graczy. W pewnym momencie mają oni do wykorzystania bonus. Chciałem aby gracze mogli go wykorzystać za pomocą wciśnięcia odpowiedniego klawisza i w związku z tym wpisuje w evencie OnKeyDown następujący warunek:

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift) {

    if( Key == VK_LEFT ) {
        randomBonusActivation();
    }
}

W tym przypadku wszystko działa poprawnie. Natomiast początkowo chciałem wykorzystać do tego klawisze prawy i lewy control dla danego gracza. I tutaj pojawia się problem, ponieważ kiedy używam wirtualnego kodu np. VK_RCONTROL lub VK_LCONTROL to gra na ten klawisz nie reaguje. Reaguje jedynie na klawisz VK_CONTROL, ale wtedy zarówno lewy jak i prawy control mogę przypisać do jednego gracza. Czy mogę w jakiś sposób przypisać lewy control do jednego zdarzenia a prawy do innego? Czyli w moim przypadku lewym control bonus aktywuje pierwszy gracz, a prawym drugi gracz.

komentarz 7 stycznia 2021 przez j23 Mędrzec (194,920 p.)

Czyli skracając wywód: chcesz mieć możliwość odbierania VK_RCONTROL lub VK_LCONTROL w zdarzeniu OnKeyDown. Tak?

komentarz 7 stycznia 2021 przez Bartek030 Obywatel (1,460 p.)
Tak, dokładnie. Chciałbym przypisać różne zdarzenia (funkcje) dla tych klawiszy - osobne dla prawego i osobne dla lewego controla.

1 odpowiedź

+1 głos
odpowiedź 7 stycznia 2021 przez j23 Mędrzec (194,920 p.)

Skoro OnKeyDown nie reaguje oddzielnie na lewy i prawy control, to pierwsze co mi przychodzi do głowy to użycie GetKeyState do testowania, który control został naciśnięty.

komentarz 7 stycznia 2021 przez Bartek030 Obywatel (1,460 p.)
edycja 8 stycznia 2021 przez Bartek030

Dzięki za wskazówkę, spróbuje jutro to wykorzystać.

EDIT

GetKeyState działa świetnie tak więc dziękuję za pomoc smiley

W swoim kodzie jedynie przeniosłem to uwarunkowanie w inne miejsce, ponieważ nie było sensu trzymać go w FormKeyDown i sprawdziłem warunek czy funkcja ta zwraca wartość mniejszą od 0

if(GetKeyState(VK_LCONTROL) < 0) {
    // code
}

Dzięki temu kod wewnątrz warunku działał na tej samej zasadzie jak porównanie &Key w FormKeyDown do wybranego klawisza, czyli po wciśnięciu wykonywał się kod wewnątrz warunku.

 

 

Podobne pytania

0 głosów
1 odpowiedź 629 wizyt
pytanie zadane 17 listopada 2018 w C i C++ przez Piotrek32 Obywatel (1,610 p.)
0 głosów
1 odpowiedź 556 wizyt
0 głosów
1 odpowiedź 138 wizyt
pytanie zadane 29 grudnia 2020 w Sprzęt komputerowy przez L30nn Początkujący (340 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...