# DoodleJump programmieren: Kollisionsabfrage



## abccba10 (3. Jul 2018)

Hallo,
im Rahmen des Schulunterrichts habe ich mir vorgenommen ein DoodleJump änhliches Spiel zu machen. Einen Großteil des Codes (wichtige Klassen und Methoden die jeder Schüler für sein eigenes Spiel brauchen wird) hat uns der Lehrer bereits gegeben.Nun zu meinem Spiel: Mit jedem Spielstart werden an zufälligen Orten in einem Bereich Rechtecke erstellt, welche die Sprungplattformen darstellen sollen. Nun zu meinem Problem: Die Figur soll von unten durch das Rechteck durchfliegen können aber wenn es von oben kommt abgestoßen werden. Wie erkenne ich aus welcher Richtung die Figur kommt? Zudem bin ich mir nicht ganz sicher wie ich allgemein die Kollisionsabfrage durchführen soll. Mein erster Gedanke war einfach die Koordinaten jeder Plattform mit der der Figur abzugleichen was aber durch die vielen Plattformen absolut unrealistisch ist. Mein darauf folgender Gedanke war, dass z.B nur ein Block an Plattformen erstellt wird(20 Plattformen) und sobald die Figur diese passiert hat gelöscht werden bzw. über der Figur wieder neu platziert werden. Somit müsste sich die Anzahl der Plattformen in Grenzen halten und somit würde dieser Koordinaten-Abgleich wieder realistischer werden. Aber irgendwie sind meine Ideen auch nicht das gelbe vom Ei, vor allem wenn ich nur über so wenig Java Wissen verfüge.
LG


----------



## Robat (3. Jul 2018)

Ob man durch eine Plattform durchfliegen kann oder nicht kann man über die Velocity regeln / abfragen. Wenn die velocity > 0 ist dann springt dein Spieler nach oben .. d.h. er kann durchfliegen. Wenn sie negativ ist dann fällt er .. er prallt also ab. (Größer 0 bzw kleiner 0 können ggf variieren je nach dem von wo der Koordinatenursprung ist).
Das mit den Plattformen löschen / generieren ist schon mal ein guter Ansatz. Die Plattformen die außerhalb des Bildschirmes sind interessieren dich nicht .. wieso also behalten.


----------



## Java20134 (3. Jul 2018)

Auf Youtube gibt es von LetsGameDev einen schönen Beitrag dazu.


----------



## abccba10 (3. Jul 2018)

Danke für eure Hilfe!
Ich habe nun die Kollisionsabfrage nach den im YouTube Video genannten Bedingungen gestaltet und dazu noch die Velocity mit eingebaut. Jedoch fliegt meine Figur weiterhin durch die Plattformen durch.
Hier der Code für die Kollision. Ich hoffe es ist halbwegs verständlich. Wie gesagt: Ich bin blutiger Anfänger.

```
public void Kollision(){
        while(true){
            JumpPosX = JumpFigur.getXPos();  //Jump ist die sich bewegende Figur
            JumpPosY = JumpFigur.getYPos(); 
            JumpVy = JumpFigur.getVy();
            for(zz=1;zz<=anzPlattformen;zz++){
               

                if( JumpPosX<PlattformXPos[zz]+PlattformBreite && JumpPosX+158>PlattformXPos[zz] && 
                JumpPosY<PlattformYPos[zz]+PlattformLaenge && JumpPosY+335>PlattformXPos[zz] && JumpVy<0)
                {
                    JumpFigur.setVy(-100);
                }

            }
            JumpFigur.animate();
            warten(300);

        }
    }
```


----------



## Java20134 (3. Jul 2018)

Das kann auch nicht funktionieren. Du musst die Kollision für dich anpassen, sodass die 'untere' Kollision nicht mit überprüft wird.


----------



## mihe7 (3. Jul 2018)

Ich würde eher sagen, dass er schon die Richtung wechseln muss: `if (JumpVy < 0) setVy(wertKleiner0);` bringt es jetzt nicht wirklich.


----------



## abccba10 (4. Jul 2018)

Danke für eure Hilfe!
mihe7 hat Recht ich habe aus versehen das "<" bzw. ">" falsch herum gesetzt. Der Fehler der mich dann aber länger suchen lassen hat war, dass ich bei der vorletzten Bedingung, also vor der Velocity-abfrage, vermutlich aus Hektik statt "PlattformYPos[zz]" "PlattformXPos" geschrieben habe. Also statt:

```
JumpPosY+335>PlattformXPos[zz]
```
ist folgendes richtig:

```
JumpPosY+335>PlattformYPos[zz]
```
Jetzt funktioniert auch die Kollision mehr oder weniger. Jetzt fehlt nur noch die Steuerung der Figur, jedoch habe ich was das angeht kaum Ahnung. Ich hatte an einen KeyListener gedacht, weis aber nicht wie ich das einsetze, bzw. in meine Abfrage einbaue.
Wäre echt super wenn ihr mir hierbei noch ein paar Tipps geben könnt.


----------

