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

setInterval wykonywany natychmiast po kliknięciu

Object Storage Arubacloud
0 głosów
310 wizyt
pytanie zadane 19 października 2016 w JavaScript przez Muhin Gaduła (4,120 p.)

Witajcie,

Po kliknięciu klawisza do zmiennej dir jest wysyłana jakaś literka, setInterval co 260 ms sprawdza czy w zmiennej dir coś się pojawiło, jeśli tak to ma wykonać się jakaś tam akcja. Wszystko działa prawidłowo, ale bardzo często po kliknięciu klawisza nic się nie dzieje, bo setInterval jeszcze nie włączył funkcji która to sprawdza, jest to niby błahostka, ale jednak irytuje. Czy da się zrobić coś z tym setIntervalem, żeby wykonał się jak tylko coś kliknę, a nie po 260 ms?

Edit: wiem, że mogę zmniejszyć czas do np. 100 ms, ale rzecz w tym, że czas musi pozostać nie zmieniony.

var dir = 0;
window.addEventListener('keydown', function(event) 
{
  switch (event.keyCode) 
  {
		//aswd
		case 65 : dir='W'; break; //lewo
		case 87 : dir='N'; break; //góra
		case 68 : dir='E'; break; //prawo
		case 83 : dir='S'; break; //dół
		//up, down, right, left
		case 37 : dir='W'; break; //lewo
		case 38 : dir='N'; break; //góra
		case 39 : dir='E'; break; //prawo
		case 40 : dir='S'; break; //dół
  }
}, false);
function game()
{
/////
}
setInterval(game, 260);

 

1 odpowiedź

+1 głos
odpowiedź 19 października 2016 przez Przemek Zembrzuski Gaduła (3,240 p.)
edycja 19 października 2016 przez Przemek Zembrzuski
dodaj event sprawdzający czy w zmiennej zaszły jakieś zmiany. Tutaj masz coś na temat http://stackoverflow.com/questions/1759987/listening-for-variable-changes-in-javascript-or-jquery
komentarz 19 października 2016 przez Muhin Gaduła (4,120 p.)
Jeśli dobrze to sobie poukładałem to dalej nic nie zmieni, bo setInterwal może się dopiero kilkaset ms po tym evencie wukonać, zresztą to sprawdzanie tego co dzieje się w zmiennej jest właśnie w game(), które jest włączane przez tego setIntervala
komentarz 19 października 2016 przez Przemek Zembrzuski Gaduła (3,240 p.)
edycja 20 października 2016 przez ScriptyChris

Wymyśliłem coś takiego może pomoże
 

var dir = 0;
window.addEventListener('keydown', function(event)
{
  switch (event.keyCode)

  {

        //aswd
        case 65 : dir='W'; break; //lewo
        case 87 : dir='N'; break; //góra
        case 68 : dir='E'; break; //prawo
        case 83 : dir='S'; break; //dół
        //up, down, right, left
        case 37 : dir='W'; break; //lewo
        case 38 : dir='N'; break; //góra
        case 39 : dir='E'; break; //prawo
        case 40 : dir='S'; break; //dół
  }
  game();
}, false);
function game(){
  if(dir!=0){
    console.log(dir);
  }

}

 

komentarz 19 października 2016 przez Muhin Gaduła (4,120 p.)
Niestety to nie ma prawa bytu, bo cała ideologia tego jest taka, że game() ma się wykonywać co 260 ms, a nie milion razy po kliknięciu klawisza jak to mam miejsce w przypadku z Twojego posta :/
komentarz 19 października 2016 przez Przemek Zembrzuski Gaduła (3,240 p.)
zdecyduj się czy chcesz by funkcja wykonywała się co 260ms czy po kliknięciu klawisza, bo jeżeli co określony czas to nie unikniesz opóźnienia ponieważ sam je określasz jako parametr setInterval
komentarz 20 października 2016 przez Muhin Gaduła (4,120 p.)
Nic nie chcę sprawdzać, szukam sposobu który pozwoli mi na jednorazowe natychmiastowe odpalenie tego co znajduje się w setInterval po kliknięciu strzałki.Piszę taki mały system chodzenia po planszy więc wymagany jest ten setInterval dla płynności
komentarz 20 października 2016 przez Przemek Zembrzuski Gaduła (3,240 p.)
Ale setInterval wykonuje funkcję w pętli nieskończonej co określony czas wiec jeżeli chcesz wykonać kod tylko w sytuacji gdy klikniesz w klawisz nie używaj setInterval

Podobne pytania

0 głosów
1 odpowiedź 3,020 wizyt
pytanie zadane 20 lutego 2018 w JavaScript przez sosick Nowicjusz (160 p.)
+1 głos
3 odpowiedzi 531 wizyt
pytanie zadane 26 kwietnia 2021 w JavaScript przez molik Użytkownik (950 p.)
0 głosów
1 odpowiedź 229 wizyt
pytanie zadane 7 listopada 2017 w JavaScript przez lastavenger Obywatel (1,060 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 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!

...