ich programmmieren gerade einen kleinen Spaceshooter und haben jetzt ein Problem mit den Geschossen.
Die geschwindigkeit der geschosse sowie des schiffs legt man ja letztendich über die Positionsveränderung pro zeit/frame fest ..
Das minimale Intervall beträgt dabei 1 Frame oder 1 sec...
Das heisst um noch schnellere geschosse zu bekommen müsste der zurückgelegte weg pro intervall erhöht werden. Hier seh ich aber die gefahr das die Kollisionserkennung dann nicht mehr anschlägt weil das geschoss einfach über das Ziel springt.
traces, also man überprüft ob sichw enn man eine linie vom anfang zum ende bewegt etwas dazwischen befindet. -> ist aber nen lustiger teil vectorrechnung
Ja, oder als Stichwort "Kontinuierliche Kollisionserkennung" bzw. "Continuous Collision Detection". Hängt halt stark davon ab, wie die Objekte repräsentiert sind, und wie die Kollisionserkennung bisher gemacht wird. (Mit der Java3D-Internen wird man da nicht weit kommen )
Als "billiger" Workaround könnte man jeden Schritt des Geschosses in z.B. 10 Teilschritte Zerlegen, die zwar nicht angezeigt werden, für die aber jedes mal die Kollisionserkennung gemacht wird.... Ist aber fragwürdig, ob das (hier) Sinn macht...
Als tip kann ich nur javamonkey engine sagen, musst du ja nicht benutzen wennde nicht willst und lieber selber bauen, aber kannst dir angucken wie die ihre Ray class implementiert haben
Einfach den "großen" in viele kleine Schritte Zerteilen.
Und diese Vektorrechnung nur in 2D macht mich nun schon seit ner ganzen Weile fertig -gleiches Problem-.
Zerteilen mag zwar gehen, ist aber keine so gute Idee. Erstens löst es das Problem nicht, wenn die Ziele im Verhältnis sehr klein werden und zweitens ist es ziemlich unoptimal. Kann man mit Java3D nicht bestimmen, ob sich ein Vektor mit einem Objekt irgendwo im Raum schneidet? Das würde ja ausreichen.
Zweite Möglichkeit dass Problem zu flicken wäre (Ok ich hab keine Ahnung von J3D - ka Ob das geht) Dass Objekt zu Strecken (Wie in 2D breite/höhe vergrößern) so dass es Die Länge dess Vectors dazubekommt, dann kann man aber auch einen Quader oder oder eine Linie über den Vektor "spannen" und auf Kollision prüfen.
man kann auch genesisfx (effektengine für java3d) verwenden oder davon kopieren. da wird im gegensatz zu den collisionbehaviors ein perframebehavior verwendet, das im gegensatz zum collisionbehavior synchron zum renderthread läuft.
Aber ändert das was daran? wenn frame a object 1 meter vor mauer, frame a+1 object 1 meter hinter mauer ist?
Ist doch im prinzip nur wieder eine zerteilung.
Zweite Möglichkeit dass Problem zu flicken wäre (Ok ich hab keine Ahnung von J3D - ka Ob das geht) Dass Objekt zu Strecken (Wie in 2D breite/höhe vergrößern) so dass es Die Länge dess Vectors dazubekommt, dann kann man aber auch einen Quader oder oder eine Linie über den Vektor "spannen" und auf Kollision prüfen.
Das könnte tatsächlich ein gut funktionierender Workaround sein. Das Objekt muss ja in seiner gestreckten Form nicht sichtbar sein, es reicht ja, wenn es intern auf diese Weise behandelt wird. Ich selbst kenne mich mit Java3D und den dort verwendeten Methoden zur Kollisionserkennung ebenfalls nicht aus, aber diese Methode sollte zumindest besser sein, als 10 Subsamples zu benutzen, was imho um einiges länger dauern dürfte als ein größeres Objekt zu testen.
Du kannst den nächsten Frame jedesmal vorrausberechnen. Wenn das Geschoss dann hinter dem Ziel liegt sollte es möglich sein, eine mögliche Kollision zu detektieren. Nunja viel Mathe und so.
Hier geht es zwar um die Kollision zwischen Linie und Kreis, aber evtl. hilt Dir dieser Ansatz weiter: http://sebleedelisle.com/2010/01/predicting-circle-line-collisions/
Ja, oder als Stichwort "Kontinuierliche Kollisionserkennung" bzw. "Continuous Collision Detection". Hängt halt stark davon ab, wie die Objekte repräsentiert sind, und wie die Kollisionserkennung bisher gemacht wird.