krouzek:auticko2

Toto je starší verze dokumentu!


Ovládání z klávesnice

Došli jsme k poznání, že kód pro zachytávání stisků kláves:

document.addEventListener('keypress', function(event){
  if(event.key=== 'w' || event.key=== 'W'){
  zrychli();
  }
 //dalsi klavesy
 
});

není dokonalý - událost keypress je totiž ta chvíle, kdy je písmenko po zmáčknutí napsáno (např. do dokumentu). Proto se při držení klávesy vykoná jedna akce (například pohyb vlevo), chvíli se počká a pak se bude vykonávat opakovaně.

Proto by se v takto naprogramované hře dalo snadno podvádět - lze totiž počáteční prodlevu i kadenci opakování nastavit v Ovládacích panelech/klávesnice (mimochodem, dialog nastavení klávesnice - viz obrázek - se v aktuální verzi Windows 10 neliší od prastarých WindowsXP).

Dolů a nahoru

Budeme tedy sledovat jiné události - keydown a keyup - okamžik, kdy jde klávesa dolů (=je zamáčknuta) a kdy se vrací nahoru. Tyto události ovšem i pro dlouhé držení (např. chci dlouho zrychlovat autíčko) vykonají pouze jednou. Proto není žádoucí, aby volaly přímo akci pridej(). Místo toho si zkusíme představit, že máme tabulku, ve které je informace, zda je momentálně klávesa držena, či ne. Po zamáčknutí w by tabulka vypadala takto:

Klávesa Proměnná Zmáčknuta?
w zmacknutoZrychli true
s zmacknutoZpomal false
a zmacknutoDoleva false
d zmacknutoDoprava false

V kódu to bude (zde pouze pro klávesu w, zbytek doplňte sami :)) takto:

//deklarace globalni promenne
zmacknutoZrychli = false;
 
document.addEventListener('keydown', function(event){
//klavesa byla zmacknuta
  if(event.key=== 'w' || event.key=== 'W'){
  zmacknutoZrychli=true;
  }
 //todo:dalsi klavesy
});
 
document.addEventListener('keyup', function(event){
//klavesa byla odmacknuta
  if(event.key=== 'w' || event.key=== 'W'){
  zmacknutoZrychli=false;
  }
 //todo:dalsi klavesy
});
  • krouzek/auticko2.1521640447.txt.gz
  • Poslední úprava: 2023/11/15 20:54
  • (upraveno mimo DokuWiki)