Daniel Thoma: Javascript 2D Engine programmieren

Beitrag lesen

Hallo ActiviT,

Weil jedes Objekt insgesamt 5 Einheiten zurücklegt, jedes Element aber nur 3 Einheiten breit ist, crashen sie gar nicht, weil sie sich zu keinem von der Engine erfassen Zeitpunkt überlappen. Wie kann man soetwas verhindern?

Ich weiß nicht, wie das tatsächlich gemacht wird. Aber ich würde versuchen, die nicht Zustände auf Kollisionen zu checken sondern Kollisionen voraus zu berechnen.
Sprich, du hast zusätzlich zur Positionsinformation noch Information darüber, in welche Richtung sich die Objekte bewegen für einen bestimmten Zeithorizont. Dann kannst Du durch Berechnen von Schnittpunkten bestimmen, wann das nächste Objekt kollidiert und den Verlauf der Simulation entsprechend anpassen.
Um zu simulieren, muss man meist diskretisieren, also unterschiedbare Zustände berechnen und nicht irgend etwas kontinuierliches. Wenn man das zu fein macht, wird man nicht mehr fertig, wenn man es zu grob macht, verpasst man eben Ereignisse. Die Idee ist nun, die Zustände einfach immer da hin zu packen, wo ein Ereignis passieren wird. Also musst Du eben berechnen, wann die Objekte kollidieren würden (bzw ein anderes Ereignis auftritt, dass die Bewegung der Objekte verändert). Dann berechnest Du genau diesen Zustand.
Das ist eine durchaus übliche Simmulationstechnik, ob auch Spieles so arbeiten, weiß ich allerdings nicht. Bei einer 2D-Welt und linearen Bewegungsabschnitten stelle ich mir das noch relativ einfach vor. In 3D und bei Bewegungen auf irgendwelchen Kurven ist die Schnittpunktberechnung schon recht aufwendig, vielleicht zu aufwendig um praktikabel zu sein.

Grüße

Daniel