In Ihrem Code verwenden Sie setInterval (moveBoxes, 20), um die Boxen zu aktualisieren, und anschließend verwenden Sie (new Date()). GetTime()), um deltaT zu berechnen. Dies ist etwas redundant, weil Sie die Zahl 20 direkt für die Berechnung von deltaT hätten verwenden können.
Es ist besser, den Code so zu schreiben, dass Sie während jedes Zeitschritts genau den gleichen Wert für deltaT verwenden. (Mit anderen Worten, deltaT sollte nicht vom Wert von (new Date()) abhängen. GetTime())). Auf diese Weise wird Ihr Code reproduzierbar und es ist einfacher für Sie, Komponententests zu schreiben.
Betrachten wir eine Situation, in der der Browser für kurze Zeit weniger CPU-Zeit zur Verfügung hat. In dieser Situation möchten Sie langfristige Auswirkungen auf die Dynamik vermeiden. Wenn die CPU-Zeit knapp ist, möchten Sie, dass der Browser in einen Zustand zurückkehrt, der von der kurzen CPU-Zeit nicht betroffen ist. Dies erreichen Sie, indem Sie in jedem Zeitschritt den gleichen Wert von deltaT verwenden.
Übrigens. Ich denke, dass der folgende Code
if(box.x < 0) {
box.x = 0;
box.vx *= -1;
}
konnte mit
if(box.x < 0) {
box.x *= -1 ;
box.vx *= -1;
}
Viel Glück mit dem Projekt ersetzt werden - und bitte Codebeispiele in der ersten Version Ihrer Frage nächste Mal, wenn Sie fragen, sind :-)
Wie unterscheiden sich die Ergebnisse? Wenn Sie den Zeitschritt auf eine sehr kleine Zahl einstellen, sollten Sie gute Ergebnisse erzielen. Funktioniert das für dich? Bitte Code anzeigen? Es ist schwer dir zu helfen. – nielsle
@nielsle Ich habe hier einen Testfall gemacht: http://paste.ubuntu.com/554854/ Das scheint perfekt mit 1ms Zeitschritt und 100ms zu funktionieren. Also habe ich keine Ahnung, was ich vor –