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

Przerywanie setintervals

Object Storage Arubacloud
0 głosów
462 wizyt
pytanie zadane 27 lipca 2017 w JavaScript przez turtelian Obywatel (1,760 p.)
edycja 27 lipca 2017 przez turtelian

Witam mam takie pytanko jak przerwać setintervals ? Tak aby przerywal wykonywanie po określonym czasie lub ilości interwałów.

fragment kodu:

function game(){
        table()
        ball()
        player()
        ai()
       
        }
        setInterval(game, 1000/60,)



chcialbym aby po pewnym czasie setinterval stpowal abym moglbym go wykorzystac do lekko zmienionej funkcji game. Na stackoverflow znalazlem takie cudo ale jakos u mnie nie dziala ( bo pewnie robie cos zle):
https://stackoverflow.com/questions/2956966/javascript-telling-setinterval-to-only-fire-x-amount-of-times
PS: moj pierwszy post proszę o wyrozumiałość :)

komentarz 27 lipca 2017 przez ScriptyChris Mędrzec (190,190 p.)

Twój kod nie przypomina kodu z SO. Nie użyłeś clearInterval, który anuluje interwał o podanym identyfikatorze - a metoda setInterval zwraca takowy..

P.S. Powinieneś wstawić kod w odpowiedni bloczek.

komentarz 27 lipca 2017 przez turtelian Obywatel (1,760 p.)
edycja 27 lipca 2017 przez turtelian

a jak ma przypominać jak napisałem że dopiero chce ten setinterval zastopowac, jak probowalem kombinowac z poradami z SO to nic z tego nie wyszło wiec dałem kod przed probami. Mógłbyś wytłumaczyć jak działa clearinterval bo z samej informacji ze cos takowego istnieje nie duzo dla mnie pożytku.
Jeśli to cokolwiek ma pomóc to moje próby wyglądały mniej więcej tak :

 

function game(){
        table()
        ball()
        player()
        ai() 
       
        }
        
        function game1(){
        table()
        ball()
        player()
        aiCrash() 
       
        }
        function setIntervalX(game, 1000/60, 100) {
    var x = 0;
    var intervalID = window.setInterval(function () {

       game();

       if (++x === 100) {
           window.clearInterval(intervalID);
       }
    }, 1000/60);
}
        setInterval(game1, 1000/60,)

 

komentarz 27 lipca 2017 przez ScriptyChris Mędrzec (190,190 p.)

Masz funkcję setIntervalX, ale nigdzie jej nie wywołujesz. Do setInterval posyłasz referencję do funkcji game1, a powinieneś do setIntervalX. Gdzie jest trzeci parametr (na SO to jest ilość powtórzeń)? U Ciebie po drugim przecinku nie leci nic. W nagłówku funkcji setIntervalX określasz nazwę pierwszego argumentu game, a pozostałe dwa to są liczby - na SO te argumenty mają swoją nazwę. Poza tym nie możesz określić argumentu (czyli utworzyć zmiennej), którego nazwa rozpoczyna się cyfrą - KLIK.

A JavaScript identifier must start with a letter, underscore (_), or dollar sign ($); subsequent characters can also be digits (0-9). Because JavaScript is case sensitive, letters include the characters "A" through "Z" (uppercase) and the characters "a" through "z" (lowercase).

Nazwa zmiennej musi rozpoczynać się od litery, znaku podkreślenia lub dolara (tak jak np. w jQuery). Dopiero kolejnym znakiem może być cyfra.

W ogóle to naucz się czytelniej formatować kod, ponieważ trudno na pierwszy rzut oka rozpoznać gdzie kończy się funkcja, albo czy nie jest ona zagnieżdżona (stosuj wcięcia tam gdzie trzeba, a nie stosuj tam gdzie nie trzeba).

komentarz 27 lipca 2017 przez turtelian Obywatel (1,760 p.)

dalej niestety niewiele rozumiem z twojego komentarza, 

 

        function game(){
            table()
            ball()
            player()
            ai() 
        
        }
         
        function game1(){
            table()
            ball()
            player()
            aiCrash() 
        
        }
 
        var delay=1;
        var repetitions=100;
        function setIntervalX(game, delay, repetitions) {
            var x = 0;
            var intervalID = window.setInterval(function () {
 
                game();
 
                if (++x === repetitions) {
                window.clearInterval(intervalID);
                }
            }   , delay);
        }
        setInterval(setIntervalX, 1000/60,)

czyli to powinno wygladac mniej wiecej tak ?
I tak znalazlem inny problem w kodzie więc nawt nie mam jak sprawdzić czy to juz działa poprawnie czy nie :)

komentarz 27 lipca 2017 przez ScriptyChris Mędrzec (190,190 p.)

Do setInterval posyłasz referencję do funkcji game1, a powinieneś do setIntervalX

Tym razem przesłałeś setIntervalX do setInterval. Powinieneś przesłać game1 do setIntervalX, bo ta druga funkcja ma anulować interwał przy określonym warunku.

Nie przesłałeś trzeciego parametru - ilości powtórzeń (masz tą zmienną z przypisaną wartością 100) - prześlij ją jako trzeci parametr.

Czyli w linijce 30:

setIntervalX(game1, 1000/60, repetitions);

Najlepiej to otwórz konsolę przeglądarki (klawisz F12) i patrz, jakie błędy Ci się wyświetlają. Będziesz wiedzieć, dlaczego kod może nie działać.

komentarz 28 lipca 2017 przez turtelian Obywatel (1,760 p.)
edycja 28 lipca 2017 przez turtelian

sęk w tym że w consoli nie ma błędu tylko setinterval sie nie stopuje :) niestety dalej nie rozumiem jak to ma dzialac a zkopiowanie tego jako linijki nie pomoglo, musze gdziesz poszukac przykladu z konkrtnym kodem to powinno pomoc w zrozumieniu jak to dziala

Edit: problem rozwiązałem  dość fajnie jest to wytłumaczone tutaj :
https://www.youtube.com/watch?v=BVALvvy5bZY

Kod po poprawkach:
 

function game(){
            table()
            ball()
            player()
            ai() 
            if (counter===500){
                clearInterval(setIntervalID);
                }
            counter++;
            if(counter>500) {
                setInterval(game1,1000/60)
                }   
        }
         
        function game1(){
            table()
            ballCrash()
            player()
            ai() 
           
        }
        var counter=0;
       var setIntervalID = setInterval(game,1000/60);

Po prostu jeśli mamy 2 set intrvaly obok siebie wykonują się one "jednocześnie" dlatego wywołanie drugiej funkcji(game1) musi być tak jakby w 1 funkcji tak samo jak clear intrval.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 136 wizyt
pytanie zadane 4 sierpnia 2017 w JavaScript przez turtelian Obywatel (1,760 p.)
0 głosów
1 odpowiedź 283 wizyt
pytanie zadane 9 czerwca 2017 w JavaScript przez Misiasty Nowicjusz (140 p.)
0 głosów
1 odpowiedź 334 wizyt
pytanie zadane 24 kwietnia 2017 w JavaScript przez wazon Nowicjusz (200 p.)

92,554 zapytań

141,399 odpowiedzi

319,535 komentarzy

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

...