NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Petr Svobodný:17.8.2017 17:45

Zdravím, zkouším si napsat jednu hru objektově.
Bohužel v kódu:

// main.js
var interval;
window.onload = function () {
    game.start();
    interval = setInterval(game.play(), 1000/game.fps);
};

Bohužel se mi funkce na objektu game zavolá pouze jednou ...
Objekt se nepohne a v konzoli je jen jednou "called".
objekt game je k dostání zde

Nevíte proč se mi funkce play vyvoliá pouze jednou?
Děkuji mnohokrát za rady.

Editováno 17.8.2017 17:46
 
Odpovědět
17.8.2017 17:45
Avatar
Martin
Člen
Avatar
Martin:17.8.2017 19:08

Mám taký pocit že by to malo byť:

interval = setInterval(function() {
        game.play();
}, 1000/game.fps);
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
17.8.2017 19:08
Avatar
Neaktivní uživatel:17.8.2017 21:00

Pouzij requestAnimati­onFrame, je tady na to i clanek https://www.itnetwork.cz/…vykreslovani

Nahoru Odpovědět
17.8.2017 21:00
Neaktivní uživatelský účet
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Martin
Jan Vargovský:18.8.2017 12:54

Klidně to může nechat tak jak to měl, ale jen tu metodu nesmí volat :)

// main.js
var interval;
window.onload = function () {
    game.start();
    interval = setInterval(game.play, 1000/game.fps);
};

Takhle te fci setInterval přepošleš jen referenci. Ve tvojem případě jsi spustil tu fci game.play(), ona se vykonala a něco se poslalo dovnitř setInterval a protože si tam můžeš poslat cokoliv tak to udělalo tenhle side effect.

PS: netestoval jsem, v JS píšu jen občas, ale v ostatních jazycích by to fungovalo :D

 
Nahoru Odpovědět
18.8.2017 12:54
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.