Doodle Jump Sprung Physik?

coco07

Bekanntes Mitglied
Hey liebe Community,

ich bin gerade dabei Doodle Jump nach zu programmieren,
dabei stoße ich leider auf das Problem der unterschiedlichen Bildschirmgrößen.
Im Moment habe ich folgende Sprung-Technik:
Y-Position der Figur um 15 erhöhen und dann pro Frame um 0.2 verringern. Sobald der Y Wert ins Minus geht, kommt der Character wieder runter, diese Werte kann ich variieren, bis ich einen realistischen Wert gefunden habe.
Exportiere ich diese Methode aber auf andere Bildschirmgrößen wird der Character natürlich langsamer oder schneller, je nachdem, ob der Bildschirm größer oder kleiner wird.
Hat jemand eine Idee, wie man das bewerkstelligen könnte, ich komm leider auf keine nützliche Lösung.

Ich programmiere zwar auf Android aber da es egal ist, auf welcher Platform ich das ganze entwickle, frage ich lieber hier nach...

grüße coco07!
 
Ich würde es so machen, dass die Werte für z.B. die Höhe 800 Pixel erstelle (wie du 15 und 0.2 genommen hast) und dann würde ich wenn sich die Größe auf z.B. 1200 Pixel ändert dies hochrechnen. (1200/800= 1.5) also musst du den y wert *1.5 Faktor nehmen.
Die 15 musst du dann auch bei der 1200 Pixel Größe natürlich mit 1.5 multiplizieren. (15*1.5=22.5)
 
Ich würde es so machen, dass die Werte für z.B. die Höhe 800 Pixel erstelle (wie du 15 und 0.2 genommen hast) und dann würde ich wenn sich die Größe auf z.B. 1200 Pixel ändert dies hochrechnen. (1200/800= 1.5) also musst du den y wert *1.5 Faktor nehmen.
Die 15 musst du dann auch bei der 1200 Pixel Größe natürlich mit 1.5 multiplizieren. (15*1.5=22.5)

Dieser Ansatz sollte anstandslos funktionieren. Best practice wäre aber, für die Abständeund Größen im Spiel eine einheit festzulegen und mit den Physikalischen Formeln zu rechnen. Die Ergebnisse werden dann erst in die konkreten Pixel-Angaben umgerechnet.
 
Hey ihr beiden,

vielen Dank für eure Antworten, leider bin ich immer noch nicht weiter, was die gleichmäßige Bewegung auf verschiedenen Bildschirmen angeht.
Ich habe mich aber für die 2. Antwort entschieden, dass ich das ausrechnen lasse und dann in Pixel umwandle. Leider finde ich keine passende Formen dafür. Kann ich das mit der Fallbeschleunigung und Erdanziehung ausrechnen?
Bitte helft mir 🙂

grüße coco07
 
Aaalso, der freie Fall ist eine beschleunigte Bewegung, für die gilt
[c]s = 0.5 * a * t²[/c]
wobei
Code:
s
die gefallene Strecke in Abhängigkeit der Beschleunigung [c]a[/c] und der Zeit
Code:
t
ist.
Die Beschleunigung errechnet sich (durch das erste Newtonsche Gesetz) mit
[c]a = F / m[/c]
wobei
Code:
F
die Kraft ist, mit der das Objekt (in unserem Fall der Doodler) nach unten gezogen wird und
Code:
m
die Masse des Objektes ist.
Die Kraft
Code:
F
lässt sich berechnen durch
[c]F = m * g[/c]
wobei
Code:
g
der sogenannte Ortsfaktor ist, einfach gesagt die Gravitation. Auf der Erde sind das 9.81 Newton pro Kilogramm, auf dem mond etwa 6 und auf dem Jupiter etwa 25 (nur damit du eine Vorstellung bekommst).
Setzt man das aber alles ein:
Code:
F = m * g
a = F / m = (m * g)/m
a = g
stellt man fest, dass beim freien Fall im Vakuum die Masse völlig egal ist.

Nun also zum konkreten Fall:

Zunächst stößt sich der Doodler ab (was auch eine Beschleunigte Bewegung ist, diesmal nach oben). Hat er sich dann abgestoßen würde er sich ohne Gravitation gleichförmig weiter bewegen.
Achtung: beim Abstoßen spielt die Masse des Doodlers sehr wohl eine Rolle. Denn Die Beschleunigung mit der er sich abstößt durch die Kraft mit der er das tut und seiner Masse berechnet wird ([c]a = F /m [/c]).
Für Gleichförmige Bewegungen gilt:
[c]s = v * t[/c]
wobei
Code:
s
die zurückgelegte Strecke in Abhängigkeit von der Geschwindigkeit
Code:
v
und der Zeit
Code:
t
seit Beginn der Bewegung ist.
v ist hier natürlich die Geschwindigkeit auf die Sich der Doodler durch das Abstoßen beschleunigen konnte. Es gilt:
[c]v = a * t[/c]

Nehmen wir also an, dass dein Doodler sich 0.25 Sekunden lang abstößt. Dann kannst du die Y-Position des Doodlers in Abhängigkeit von der Zeit
Code:
t
(seit Beginn des Abstoßens) so berechnen:
Code:
für t <= 0.25s
y1(t) = 0.5 * (F / m) * t² - 0.5 * g * t²
(Achtung hier: Wenn F / m nicht größer als g ist, hebt der Doodler garnicht erst ab).

für t > 0.25s
y2(t) = y1(0.25) + (F * 0.25s * t)/ m - 0.5 * g * t²
Du kannst hier an den Werten
Code:
g
,
Code:
F
und
Code:
m
rumspielen bis das ganze so läuft, wie du willst.

Für die implementierung würde ich dir auch empfehlen, die Formeln oben nochmals zu vereinfachen weil du Rechenzeit sparen kannst indem du die Teile im vorraus berechnest, die sich nicht ändern (z.B. [c]o.5 * g[/c] oder [c]0.5 * (F / m)[/c].

P.S.: Der Luftwiederstand ist in der ganzen Rechnung vernachlässigt.
 

Zurück
Oben