Processing: Wie Jump Funktion programmieren?
Hallo Leute, ich programmiere gerade ein neues Spiel und wäre froh wenn mir jemand mit der physikalisch korrekten Funktion helfen kann, wie ich Joe (--> Jetpack Joyride) auf Tastendruck (Pfeiltaste) springen lassen kann. Er soll die gleiche x Koordinate behalten nur die Y-Koordinate verändern. Also nach oben springen dann aufgrund der Gravitation wieder verlangsamen und zu Boden sinken. Jedoch wenn ich die Pfeiltaste 2mal oder gedrückt halte, das er dann bis an die Decke Fliegt.
Das wäre bis jetzt das Programm.
Wäre mega froh wenn mir das jemand programmieren könnte
Danke im voraus
Aktuell ,,fliegt,, Joe stockig rauf wenn ich Leertaste drücke, aber er soll bei Tastendruck einen Sprung machen und dann mit Gravitation wieder runter fallen. Wenn ich jedoch die Taste mehrmals drücke, sollte er ganz nach oben fliegen...
kann mir das jemand als Programm schreiben?
Danke vielmals für die Hilfe
2 Antworten
Du brauchst an sich nur eine Variable, für die aktuelle y-Position (y) und eine Variable für die Geschwindigkeit auf der y-Achse (yVelocity).
Die Geschwindigkeit muss geändert werden, sobald die Taste zum Springen gedrückt wird. Da die Bewegung nach oben gehen soll, bräuchtest du einen negativen Wert. Umso niedriger der ist, umso höher steigt deine Figur bei einem Sprung.
In der draw-Funktion wiederum zeichnest du die Figur mitsamt Zeichenfläche immer wieder neu (für die y-Koordinate der Spielfigur wird natürlich die y-Variable genutzt) und addierst danach die Geschwindigkeit auf y auf. So entsteht eine steigende Bewegung, die durch mehrmaliges Drücken der Sprungtaste gesteigert werden kann.
Im letzten Schritt braucht es eine Gegenbewegung (eine Art Schwerkraft), die die Geschwindigkeit stetig senkt, ihr also aufgerechnet wird. Das ist am besten ein kleiner Wert. Ich würde da an ein Zehntel des absoluten Geschwindigkeitwerts denken, also bspw. 0.3 bei -3).
Da deine Figur somit stetig fällt, sollte sie nicht durchgehend springen, brauchst du noch eine Bodenkollision. Hierbei genügt es, den Wert von y zurückzusetzen, sollte er unter die obere Kante des Bodens dringen.
Das wäre das aktuelle Programm.. die Figur ,,fliegt,, aber bei Tastendruck nur ruckartig nach oben. Eigentlich sollte sie nach Oben dann verlangsamen und wieder aufgrund der Schwerkraft auf den Boden sinken. Bei mehrfachem Tastendruck sollte es möglich sein dass sie ganz zur Decke fliegen kann.
Kann mir das jemand programmieren? Danke für die Hilfe
PImage img0; -->Hintergrund
PImage img1; -->Joe
float x = 650, y = 830; //Startpunkt Joe
float speedY = -3;
float counter = 0;
float g = -0.6; //Gravity
void setup() {
size (1920,1080);
imageMode(CENTER);
frameRate(100);
img0 = loadImage("Background.png"); //Hintergrund
img1 = loadImage("JetpackMan1.png");
}
void draw(){
image(img0,width/2,height/2,width,height);
image(img1,x,y);
text("SCORE: " + counter,40,40,50,50);
if (y<=200){y=200;}
if (y>=830){y=830;}
}
void keyPressed(){//wird automatisch ausgeführt
if (keyCode == 32){y = y+ speedY;}
else {y = y+ g;}
}
s(t) = a * 0.5 * t² + v0 * t + s0
wäre die formel für gleichmäßig beschleunigte bewegung.
s ist die strecke
a die beschleunigung (beim aufsteigen die beschleunigung vom jetpack, beim fallen die erdbeschleunigung also ~9.81)
t ist die zeit
v0 die anfangsgeschwindigkeit bei t=0
und s0 ist die anfangsposition bei t=0
Ja genau, aber weiss jemand wie ich dies ins Programm einsetzten kann, das es einen flüssigen ,,JUMP,, gibt.