2016-03-20 10 views
1

Ich bin in Spiel Entwicklung online. Ich versuche ein Online-FPS-Spiel zu machen, und ich bin nur an den Punkt gekommen, an dem ich meinen Charakter aktualisieren muss. Ich versuche, meinen Code einfach zu halten, indem ich nur eine Zeichen- und Aktualisierungsfunktion verwende. Wenn die HTML-Lasten, führe ich beide: (Ist das notwendig?)Javascript Update Funktionen

<body onload='DRAW(); UPDATE();'> 

Die Auslosung Funktion der Spieler auf den Bildschirm zieht, und das Update soll für einen Tastendruck überprüfen, um den Charakter zu bewegen. Ich versuche, das Skript Update mit dieser zu machen:

function UPDATE() 
{ 
    update = setInterval(UPDATE, 60); 
} 

und meinem Wissen, es funktioniert gut, weil, wenn ich versuche und Bearbeiten von Code in meinen Online-IDE (c9.io), die ich verwende, um die Website zu testen Es friert ein, wenn die Site ausgeführt wird. Ich rufe auch eventListeners in der Zeichenfunktion auf. (Ist das richtige, wenn ich will für einen Schlüssel testen hinunter jeden Frame?)

function DRAW() 
{ 
    window.addEventListener('keydown', function (e) { 
     keys.keys = (keys.keys || []); 
     keys.keys[e.keyCode] = true; 
    }); 
    window.addEventListener('keyup', function (e){ 
     keys.keys[e.keyCode] = false; 
    }); 
} 

Meine Fragen sind:

  • Gibt es einen einfacheren Weg, in jedem Frame ein Skript Update zu machen?

  • Gibt es ein JavaScript-Addon (wie Three.js), das ich verwenden kann, um dies zu erleichtern?

Jedes Wissen wird sehr geschätzt.

Antwort

0

Das macht alles Absturz:

function UPDATE() 
{ 
    update = setInterval(UPDATE, 60); 
} 

Sie sind alle 60ms rekursiv ein neues Intervall zu schaffen; Beim ersten Aufruf von UPDATE erstellen Sie ein Intervall, das alle 60 ms ein neues Intervall erstellt. Alle neu erstellten Intervalle machen dasselbe. Ich weiß nicht wirklich, was du hier eigentlich machen willst.

Ich rufe auch eventListeners in der Zeichenfunktion. (Ist die richtige , wenn ich für einen Schlüssel testen möge hinunter jeden Frame?)

Es ist in Ordnung Ereignis-Listenern in der Zeichenfunktion zu erstellen, sofern Sie diese Funktion nur einmal anrufen. Was ich nicht vermute. Jedes Mal, wenn Sie DRAW() aufrufen, wird ein neuer Satz von EventListenern hinzugefügt, und das wollen Sie wirklich nicht.

Was Sie brauchen, ist eine Form der Spielschleife. Erklären, wie man ein FPS-Spiel erstellt, ist ein bisschen mehr als ich tun kann, aber Sie können beginnen, indem Sie diesen Artikel Anatomy of a video game

+0

DRAW() sollte nur einmal in der Teil des HTML aufrufen (nach meinem Wissen), Danke für die Info auf dem SetInterval obwohl. Ich wusste, dass es krachte, ich konnte einfach nicht verstehen warum. Ich überprüfe den Artikel –

+0

@ TaylorBrown Denken Sie es als äquivalent zu einer nuklearen Kettenreaktion. Nach einer Laufzeit von nur 960ms haben Sie bereits 65536 Intervalle gleichzeitig und verdoppelt sich alle 60ms. Dein Computer kann damit nicht umgehen und der Browser stürzt ab. – dannyjolie

+0

Gute Analogie, macht jetzt viel mehr Sinn. –