Hallo,
ich programmiere gerade als Schulprojekt ein Jump&Run in Java und komme dabei auch ganz gut vorwärts, allerdings beiße ich mir im Moment die Zähne dabei aus, meine Figur einfach fallen zu lassen, wenn sie keinen Boden unter den Füßen hat.
Ich benutzte die Intersects(o)-Methode wie im Tutorial von Quaxli (einfache Kollision S.64).
Mein Gedanke war, immer wie folgt zu prüfen:
Also wenn er keine Überschneidung hat und er nicht springt, erhöht sich der Y-Wert bis er den Boden berührt. Danach sollte er nicht mehr in die Abfrage kommen und meine Figur ist am Boden. So die Theorie. In der Praxis geht er aber immer in diese Abfrage und sorgt so dafür, dass man nicht mehr springen kann oder man fällt sofort durch den Boden.
Hier noch der ganze Codeabschnitt, fürs Springen und Fallen. War es evtl. nicht ganz so schlau das so mit der move Methode zu mischen?
Ich wäre für einen Denkanstoß sehr dankbar und sei es auch nur die Info, weshalb das so überhaupt nicht funktionieren kann
.
Ich komme jetzt seit 2 Tagen nicht mehr weiter und ich wette die Lösung ist so simpel..
Spiel, ohne "Fallen Abfrage"(Wer es testen will, muss nur den Code in der Klasse Spieler einfügen)
ich programmiere gerade als Schulprojekt ein Jump&Run in Java und komme dabei auch ganz gut vorwärts, allerdings beiße ich mir im Moment die Zähne dabei aus, meine Figur einfach fallen zu lassen, wenn sie keinen Boden unter den Füßen hat.
Ich benutzte die Intersects(o)-Methode wie im Tutorial von Quaxli (einfache Kollision S.64).
Mein Gedanke war, immer wie folgt zu prüfen:
Java:
if(this.intersects(o){
...
}
else if(!this.intersects(o)&&dy==0){
y+=0.5;
}
Also wenn er keine Überschneidung hat und er nicht springt, erhöht sich der Y-Wert bis er den Boden berührt. Danach sollte er nicht mehr in die Abfrage kommen und meine Figur ist am Boden. So die Theorie. In der Praxis geht er aber immer in diese Abfrage und sorgt so dafür, dass man nicht mehr springen kann oder man fällt sofort durch den Boden.
Hier noch der ganze Codeabschnitt, fürs Springen und Fallen. War es evtl. nicht ganz so schlau das so mit der move Methode zu mischen?
Java:
public class Spieler extends Objekt {
boolean ok=true;
boolean ersterdurchlauf=true;
double yalt;
[...Andere Methoden etc...]
public void move(long zeit_letzte_schleife){
if (dx!=0){ //Wenn Tempo nicht 0
x+=dx*(zeit_letzte_schleife/1e9); //ändere Position
}
if(dy!=0){ //Wenn Tempo nicht 0
if(ersterdurchlauf){ //Speichere Absprungs Höhe
yalt=getY();
ersterdurchlauf=false;}
if (ok){ //Sprunglogik
y+=-0.8;
System.out.println("Hoch "+y);}
if(y<=yalt-60){
ok=false;
System.out.println("Oben angekommen "+y);
GamePanel.hoch=false;
GamePanel.runter=true;}
if(!ok){
y+=0.8;
System.out.println("Runter "+y);
}
}
if(y>=400){//Verloren wenn Figur zu weit unten
GamePanel.setGameStarted(false);
}
}
@Override
public boolean kollision(Objekt o) {
if(this.intersects(o)){
System.out.println("intersect");
ok=true;
ersterdurchlauf=true;
GamePanel.blocked=false; //ja nicht sehr edel aber es soll erstmal funktionieren ;)
GamePanel.runter=false; // -"-
return false;
}else{
if(!this.intersects(o)&&dy==0){
System.out.println("bin drin");
y+=0.5;
return false;
}
}
return false;
}
Ich wäre für einen Denkanstoß sehr dankbar und sei es auch nur die Info, weshalb das so überhaupt nicht funktionieren kann
Ich komme jetzt seit 2 Tagen nicht mehr weiter und ich wette die Lösung ist so simpel..
Spiel, ohne "Fallen Abfrage"(Wer es testen will, muss nur den Code in der Klasse Spieler einfügen)