• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
518 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,506 wizyt
pytanie zadane 20 lutego 2018 w JavaScript przez sosick Nowicjusz (160 p.)
+1 głos
3 odpowiedzi 804 wizyt
pytanie zadane 26 kwietnia 2021 w JavaScript przez molik Użytkownik (950 p.)
0 głosów
1 odpowiedź 255 wizyt
pytanie zadane 7 listopada 2017 w JavaScript przez lastavenger Obywatel (1,060 p.)

93,187 zapytań

142,201 odpowiedzi

322,012 komentarzy

62,514 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2127p. - dia-Chann
  2. 2092p. - Łukasz Piwowar
  3. 2079p. - Łukasz Eckert
  4. 2037p. - Tomasz Bielak
  5. 2006p. - Michal Drewniak
  6. 2006p. - rucin93
  7. 2005p. - Łukasz Siedlecki
  8. 1964p. - CC PL
  9. 1946p. - Adrian Wieprzkowicz
  10. 1901p. - Mikbac
  11. 1744p. - rafalszastok
  12. 1734p. - Anonim 3619784
  13. 1586p. - Dawid128
  14. 1520p. - Marcin Putra
  15. 1480p. - ssynowiec
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...