07. juli 2000 - 16:42Der er
3 kommentarer og 4 løsninger
OnKeydown vs. OnKeypress
Hej
Jeg er i gang med at lave et godt gammeldags "orme-spil". Men jeg er stødt ind i alvorligt problem: Jeg kan ikke få spillet til at registerer når der bliver trykket på en tast (piletasterne)!!! ER der en der venligst kan foreklare dette på baby sprog, thi jeg er rimelig uerfaren inden for området!!! Det er såadan i spillet at når en piletast bliver trykket ned, så skal ormen jo naturligvis dreje, hvilket jeg får den til via forskellige funktioner (og formenlig en "timer", som jeg heller ikke ved hvordan man bruger, men det kommer der nok snart et andet spårgsmål med!'s')
Når du vil kigge på piletasterne er det events OnKeyDown (eller OnKeyUp) du skal bruge:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if shiftstate = [] then // ingen shift, ctrl, alt eller kombination heraf trykket samtidig begin if key = VK_LEFT then // venstre pil begin // drej ormen til venstre end; if key = VK_RIGHT then // højre pil begin // drej ormen til højre end; if key = VK_UP then // op pil begin // drej ormen opad end; if key = VK_DOWN then // ned pil begin // drej ormen nedad end; end; end;
Så enkelt er det. Her er i øvrigt en list over de virtuelle "keycodes" in Win32:
Ved at bruge formens OnKeyDown og OnKeyUp kan du faktisk læse flere taster på samme tid (eksempelvis om brugeren både trykker på Pil-Højre og Pil-Op).
Du lader din form have et array "Keys : Array[0..255] of boolean;". I din forms "OnCreate" sætter du alle værdier til false.
I din OnKeyDown sætter du værdierne "True", men det er så også her du skal teste på hvad brugeren har trykket på: <SNIP> FKeys[(Key and $FF)] := True; if (FKeys[VK_RIGHT]) and (FKeys[VK_UP]) then begin // Brugeren trykker både pil_op og pil_ned end; </SNIP>
I din OnKeyUP sætter du værdierne False: <SNIP> FKeys[(Key and $FF)] := True; </SNIP>
Jeg er ked af at jeg først svarer nu, men det er vel trods alt sommerferie!!!
I mellem tiden har jeg dog fundet ud af hvad der er galt! Det er yderst simpelt: I formes properties er der et sted der hedder "KeyPreview" Og denne skal jo naturligvis være True!!! Såre simpelt og så køre resten af sig selv!!!
Derfor vil jeg bare tildele pointsne ud til alle svarene!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.