Hallo erstmal, dies ist mein erster Post hier.
Ich versuche mich zur Zeit an einem Jump And Run und mache dabei auch ganz gute Fortschritte, allerdings bin ich jetzt auf ein Problem gestoßen. Und zwar habe ich eine Kollisionsabfrage geschrieben, mit der getestet wird, ob die Spielfigur von unten/oben/links/rechts gegen ein Objekt stößt. Klappt soweit schon ganz gut, das heißt wenn man gegen oder auf Objekte läuft/springt, wird die Spielfigur gestoppt.
Dummerweise klappt das bisher nicht für den Fall, dass man von einer Kante herunterläuft, die Figur fällt dann nich runter. Meine Idee ist, dass wann immer man kein Objekt unter sich hat (->nodown ist false) der Status auf falls gesetzt wird, man sich also im Fall befindet. Eigentlich müsste ich dazu ja in der Kollisionsabfrage nodown = false setzen wenn die Hit-Bedingung nicht erfüllt wird (das habe ich im Quelltext mal groß geschrieben), aber das führt dann immer dazu, dass die ganze Abfrage nicht mehr für den Fall funktioniert, dass der Spieler ein Objekt von oben trifft. Wenn ich diesen Teil rausnehme, geht halt alles außer der Fall von der Kante. Komischerweise fällt der Spieler auch korrekt bis zum Boden wenn ich ihn beim Programmstart in der Luft anfangen lasse...
Hat jemand ne Idee, was da noch nicht hinhaut, muss ich vielleicht nodown irgendwoanders auf false setzen?
Hier ist die Kollisionsmethode der Spielfigur:
(bx, by, bh und bw sind die Koordinaten und Dimensionen des Objektes)
Und hier die Bewegunsmethode:
Ich versuche mich zur Zeit an einem Jump And Run und mache dabei auch ganz gute Fortschritte, allerdings bin ich jetzt auf ein Problem gestoßen. Und zwar habe ich eine Kollisionsabfrage geschrieben, mit der getestet wird, ob die Spielfigur von unten/oben/links/rechts gegen ein Objekt stößt. Klappt soweit schon ganz gut, das heißt wenn man gegen oder auf Objekte läuft/springt, wird die Spielfigur gestoppt.
Dummerweise klappt das bisher nicht für den Fall, dass man von einer Kante herunterläuft, die Figur fällt dann nich runter. Meine Idee ist, dass wann immer man kein Objekt unter sich hat (->nodown ist false) der Status auf falls gesetzt wird, man sich also im Fall befindet. Eigentlich müsste ich dazu ja in der Kollisionsabfrage nodown = false setzen wenn die Hit-Bedingung nicht erfüllt wird (das habe ich im Quelltext mal groß geschrieben), aber das führt dann immer dazu, dass die ganze Abfrage nicht mehr für den Fall funktioniert, dass der Spieler ein Objekt von oben trifft. Wenn ich diesen Teil rausnehme, geht halt alles außer der Fall von der Kante. Komischerweise fällt der Spieler auch korrekt bis zum Boden wenn ich ihn beim Programmstart in der Luft anfangen lasse...
Hat jemand ne Idee, was da noch nicht hinhaut, muss ich vielleicht nodown irgendwoanders auf false setzen?
Hier ist die Kollisionsmethode der Spielfigur:
(bx, by, bh und bw sind die Koordinaten und Dimensionen des Objektes)
Java:
public void collide(float bx, float by, float bw, float bh) {
w=image.getWidth(null);
h=image.getHeight(null);
if( y+h>=by-1 && y+h<=by+7 && x<bx+bw && x+w>bx ) {// von oben
nodown = true;
hity = by - h;
} ELSE
NODOWN = FALSE;
if( y<by+bh && y>by+bh-3.5f && x+w>bx && x<bx+bw) //von unten
noup = true;
if( x+w>=bx && x+w<=bx+2.5f && y<=by+bh && y+h>=by ) //von links
noright = true;
if( x<=bx+bw && x>=bx+bw-2.5f && y<=by+bh && y+h>=by )//von rechts
noleft = true;
}
Und hier die Bewegunsmethode:
Java:
public void move() {
if(!nodown && !jumps) { //Spieler bewegt sich von Objekt herunter
falls = true;
}
if (drin() && !moveScreen() && (!ducks || jumps || falls)) {
if((noleft && pressr) || (noright && pressl) || (!noright && !noleft)) {
x += dx;
noright=false;
noleft=false;
}
}
if((jumps || falls)) { //Sprung
jump();
}
y += dy;
}
Zuletzt bearbeitet: