Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][JQuery]Opóźnienie w keypress, keydown i keyup
Forum PHP.pl > Forum > Przedszkole
Maxie
Witam Was! Ostatnimi czasy zacząłem pisać stronę, miała to być prosta gra - bijatyka. Zrobiłem by moja postać się poruszała. Tzw:

Kod
$(document).keydown( function (e) {
  var position = lucario.position();

switch (e.keyCode)
{

case 37: // Left
lucario_move(left);
break;


case 38: // Up
lucario_move(up);
break;


case 39: // Right
lucario_move(right);
break;
    
case 40: // Bottom
lucario_move(bottom);
break;

}
});


I mam teraz mały problem, którego nie potrafię ogarnąć. Otóż, gdy wciskam wyżej wymieniony klawisz, którykolwiek, pętla zachowuję się jakby ktoś ją włączył raz, poczekał i dopiero włączył powtarzalność...
Ehh... Wytłumaczę to inaczej. Za pomocą ilustracji oneeyedsmiley02.png
Więc [ ] - nic, a [W] - to wykonywanie czynności.
Gdy wciskam klawisz raz:
[W]
Gdy przytrzymuję:
[W][ ][ ]][W][W][W]...

Nadal nie wiem jak nazwać ten efekt sadsmiley02.gif .
Jeżeli wiecie jak na to zaradzić, proszę o pomoc!
radziopoke
Ja kiedyś też tworzyłem grę może to nie był javascript, ale problem można rozwiązać tak jak tam. Za pomocą zmiennych dla klawiszy.
przykład:
Kod
var key_left=false;
var key_right=false;
$(document).keydown( function (e) {
  switch (e.keyCode)
  {
    case 37:
      key_left=true;
      break;
    case 39:
      key_right=true;
      break;
  }
});

$(document).keyup( function (e) {
  switch (e.keyCode)
  {
    case 37:
      key_left=false;
      break;
    case 39:
      key_right=false;
      break;
  }
});

setInterval(function(){
  if(key_left)
  {
    lucario_move(left);
  }
  else if(key_right)
  {
    lucario_move(right);
  }
},50);


w taki sposób ustalasz nawet częstotliwość działania klawiszy w funkcji setInterval

Krótki opis zasady działania:
Gdy wciskamy klawisz lewo lub prawo przełączamy odpowiednią zmienną na true. Gdy puszczamy klawisz zmienna wraca do wartości false. Funkcja setInterval sprawdza czy dany klawisz jest aktualnie wciśnięty. Nie uważaj jak stosujesz instrukcje warunkowe if... else if. czasem warto pominąć else by sprawdzić każdy klawisz.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.