lundi 18 mai 2015

Kollisionserkennung, JavaFX

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 Code:

  1.  
  2. public void update(){
  3.  
  4. moveInvinciBagel(iX,iY); // hier die namen geerbt
  5. // mal getrennt in einer Kollionsdatei.
  6. }




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 Code:

  1.  
  2. private void moveInvinciBagel(double x, double y) {
  3.  
  4. for (int i=0; i<invinciBagel.castDirector.getCurrentCast().size(); i++) {
  5.  
  6. Rectangle rect1 = new Rectangle(invinciBagel.castDirector.getCurrentCast().get(i).getiX(), invinciBagel.castDirector.getCurrentCast().get(i).getiY(), 5, 5);
  7. Rectangle rect2 = new Rectangle(invinciBagel.iBagel.getiX(), invinciBagel.iBagel.getiY(), 5, 5);
  8.  
  9.  
  10. if (rect1.getBoundsInParent().intersects(rect2.getBoundsInParent())) {
  11. if(rect2 == rect1){spriteFrame.setTranslateY(spriteFrame.getTranslateY())}
  12. else{spriteFrame.setTranslateY(spriteFrame.getTranslateY())}
  13. }else{spriteFrame.setTranslateY(spriteFrame.getTranslateY() + 2)}
  14. }


Oder so:

Java Code:

  1.  
  2. private void moveInvinciBagel(double x, double y) {
  3.  
  4. for (int i=0; i<invinciBagel.castDirector.getCurrentCast().size(); i++) {
  5.  
  6. if (invinciBagel.iBagel != invinciBagel.castDirector.getCurrentCast().get(i))
  7. {
  8. if((spriteFrame.getTranslateY()) == invinciBagel.castDirector.getCurrentCast().get(i).getiY() {
  9.  
  10. if (spriteFrame.getTranslateX() > (invinciBagel.castDirector.getCurrentCast().get(i).getiX() + 5))
  11. {spriteFrame.setTranslateY(spriteFrame.getTranslateY());}
  12. if (spriteFrame.getTranslateX() < (invinciBagel.castDirector.getCurrentCast().get(i).getiX() - 5))
  13. {spriteFrame.setTranslateY(spriteFrame.getTranslateY());}
  14. else {
  15. spriteFrame.setTranslateY(invinciBagel.castDirector.getCurrentCast().get(i).getiY())
  16. }}
  17. } else {spriteFrame.setTranslateY(spriteFrame.getTranslateY());}}


Kollisionserkennung, JavaFX

0 commentaires:

Enregistrer un commentaire