Processing: Wie Jump Funktion programmieren?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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.

Tyldu  21.11.2022, 20:36

ist so allerdings nicht physikalisch korrekt

0
Koebi10 
Fragesteller
 22.11.2022, 19:43

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;}

}

0

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

Woher ich das weiß:Studium / Ausbildung – Softwareentwickler, B. Sc. Informatik
Koebi10 
Fragesteller
 21.11.2022, 20:07

Ja genau, aber weiss jemand wie ich dies ins Programm einsetzten kann, das es einen flüssigen ,,JUMP,, gibt.

0
Tyldu  21.11.2022, 20:10
@Koebi10

die formel halt angepasst in die draw function packen und dann änderst du halt a einmal wenn der up gedrückt wird und einmal wenn up released wird (so ungefähr jedenfalls)

0