Konflikt zwischen timeout und eventhandler
WiMu
- javascript
Hallöle,
folgendes Problemchen: als kleine Fingerübung habe ich mir ein Pong programmiert (mit Prototype-Framework). Kern der Sache sind zwei voneinander getrennte Funktionen. In der einen wird per timeout alle 50ms (entspricht 20 frames pro Sekunde) die Position des "Balls" berechnet - mit Bande und allem, was sonst so dazugehört. Die andere sorgt per mousemove dafür, dass sich der "Schläger" per Maus bedienen lässt. Getrennt voneinander funktioniert beides tadellos, aber zusammen ruckelt und zuckelt das script leider so sehr, dass richtiges Spielen unmöglich wird, und zwar in allen gängigen browsern.
Gibt es eine Möglichkeit, die Mausposition ebenfalls nur alle 50ms auszulesen - ohne zugehörigen eventhandler? Dann könnte ich das evtl. auf eine Funktion reduzieren, was möglicherweise das Problem beheben würde. Oder sonst eine Idee?
Grüße,
WiMu
Hallo WiMu,
afaik kommst du an die Mauskoordinaten nur über einen Event. Du könntest aber im Eventhandler die Mausposition nur speichern und in der Timeoutfunktion dann Ball- und Schlägerposition aktualisieren.
Ich bin jetzt kein Experte in Sachen Prototype-Framework, aber ich glaube nicht, das bei der Entwicklung die Ausführungsperformance im Vordergrund stand. Ich würde daher auf das Framework verzichten. Auch würde ich die Referenzen auf die Elemente zwischenspeichern:
var Ball = document.getElementById("Ball");
und im Timeout (warum eigentlich kein Intervall?)
Ball.style.top = ...;
Gruß, Jürgen
Hallo Jürgen,
vielen Dank; das mit Mausposition nur per event auslesen und alle 50ms aktualisieren ist 'ne prima Idee ... werde ich mal probieren.
Prototype verwende ich, weil's so schön einfach ist ... kann das evtl. ausbauen, wenn alles fertig ist.
Die Referenz zum Ball (und allen anderen bewegten Elementen) sieht genau so aus, wie von dir beschrieben :-)
Grüße,
WiMu
Nochmal vielen Dank ... script rennt jetzt wie der Teufel :-)
Grüße,
WiMu