Kollisionserkennung, JavaFX

Nummer6800

Aktives Mitglied
Hallo.

Ich habe Probleme mit Kollionserkennung.

ich habe es mit x und y Berechnungen versucht und mit intersects versucht.
Entweder geht das Vierreck durch die anderen durch, oder es bewegt sich nicht von seinem Platz.

Lass es in der handel Methode dank Animationstimer immer wieder
eine move Methode und Collisonsmethode ausfuehren.

Am Anfang versuche ich immer den Wuerfel auszuschliessen der schon im Array ist
invinciBagel.castDirector.getCurrentCast().

Liegt das vielleicht an meinem Rectangel da ich anstatt der eigentlichen Bilder benutze?
Nur fuer die KOllision erschaffe ich sie extra und fuege die Daten der Bilder ein.

Habe schon ein paar Webseiten ausprobiert. Habe auch in diesem Forum Dinge zum ausprobieren gefunden.

Aber irgendwie werde ich das Gefuehl nicht los, dass das Array das Problem ist. Das Problem ist vermutlich
der Gegenstand selbst, der sich selbst findet. Oder das Ding bleibt stehen, obwohl gar nichts damit zu tun,
und dieses getBoundsInParent funktioniert bei mir nicht.

Eine richtige Kollionserkennung ist mir nicht so wichtig.
Gibt es einen ganz einfachen Weg?

Alle Versionen sehen entweder so aus:

Java:
    public void update(){

        moveInvinciBagel(iX,iY); // hier die namen geerbt
 // mal getrennt in einer Kollionsdatei.
    }



Das was hier jetzt in der moveInvinciBagel() steht, stand vorher in einer extra kollionsmethode.
und in der stand dann frueher soe eine einfache Zeile: spriteFrame.setTranslateY(spriteFrame.getTranslateY() + 2)
Das sich immer weiter nach unten Bewegt. Die Kollisionsmethode sollte es dann aufhalten. Habe die MEthode dann
weggelassen und alles in die moveiniviBagel() gesteckt.

Java:
    private void moveInvinciBagel(double x, double y) {

for (int i=0; i<invinciBagel.castDirector.getCurrentCast().size(); i++) {

Rectangle rect1 = new Rectangle(invinciBagel.castDirector.getCurrentCast().get(i).getiX(), invinciBagel.castDirector.getCurrentCast().get(i).getiY(), 5, 5);
Rectangle rect2 = new Rectangle(invinciBagel.iBagel.getiX(), invinciBagel.iBagel.getiY(), 5, 5);


if (rect1.getBoundsInParent().intersects(rect2.getBoundsInParent())) {
  if(rect2 == rect1){spriteFrame.setTranslateY(spriteFrame.getTranslateY())}
  else{spriteFrame.setTranslateY(spriteFrame.getTranslateY())}
}else{spriteFrame.setTranslateY(spriteFrame.getTranslateY() + 2)}
}

Oder so:

Java:
    private void moveInvinciBagel(double x, double y) {

for (int i=0; i<invinciBagel.castDirector.getCurrentCast().size(); i++) {

if (invinciBagel.iBagel != invinciBagel.castDirector.getCurrentCast().get(i))
{
  if((spriteFrame.getTranslateY()) == invinciBagel.castDirector.getCurrentCast().get(i).getiY() {

	if (spriteFrame.getTranslateX() > (invinciBagel.castDirector.getCurrentCast().get(i).getiX() + 5))
               {spriteFrame.setTranslateY(spriteFrame.getTranslateY());}
	 if (spriteFrame.getTranslateX() < (invinciBagel.castDirector.getCurrentCast().get(i).getiX() - 5))
               {spriteFrame.setTranslateY(spriteFrame.getTranslateY());} 
        else { 
	spriteFrame.setTranslateY(invinciBagel.castDirector.getCurrentCast().get(i).getiY())
   }}
} else {spriteFrame.setTranslateY(spriteFrame.getTranslateY());}}
 
Zuletzt bearbeitet:
Ich muss gestehen ich verstehe dein Problem nicht wirklich.
Mal so ne Fragen, befinden wir uns im 2D oder 3D ?
Wenn im 2D dann wird das alles relativ einfach.

mfg Major
 
In 2D. Ich lasse von oben einen Vierreck fallen. Würfel: invinciBagel.iBagel

Unten ist eine Mauer aufgebaut: invinciBagel.castDirector.getCurrentCast().get(i))
Mit einer For schleife lese das Array aus.

Dann pruefe ich ob das Vierreck mit den Dingern im Array kollidiert. Im Array ist auch das Vierreck.
Aber das kann ich entfernen. Kein Problem.

Dank dem Timer wird die Kollision-Prüfung immer wieder ausgefuehrt. Weil ich das Ding jeden Zyklus +2 fallen lasse.
Wenn es eine Kollision gibt, dann sollte es vor der Mauer stehen bleiben.
 
Also wenn das ding einfach block gerade von oben nach unten fällt, dann ist das doch ganz easy.
Frag einfach ab ob die y-Kood vom würfel + die höhe des Würfels < y-Kood der Mauer.
Wenn das ding ein wenig dynamischer funktionieren soll, dann solltest du uns weitere Infos geben, zum Bleistift ob Mauer und Würfel gleich groß sind oder sowas. Wenn beides gleich groß ist dann wird das ganze echt einfach.

mfg Major
 

Zurück
Oben