Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][JQuery]Opóźnienie w keypress, keydown i keyup
Maxie
post
Post #1





Grupa: Zarejestrowani
Postów: 82
Pomógł: 1
Dołączył: 19.10.2011

Ostrzeżenie: (0%)
-----


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!
Go to the top of the page
+Quote Post
radziopoke
post
Post #2





Grupa: Zarejestrowani
Postów: 125
Pomógł: 14
Dołączył: 2.06.2010

Ostrzeżenie: (0%)
-----


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.

Ten post edytował radziopoke 17.02.2013, 15:47:48
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 05:59