# Doodle Jump Sprung Physik?



## coco07 (7. Feb 2014)

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!


----------



## TiGreen (8. Feb 2014)

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)


----------



## Tobse (8. Feb 2014)

TiGreen hat gesagt.:


> 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.


----------



## coco07 (14. Feb 2014)

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


----------



## Tobse (15. Feb 2014)

Aaalso, der freie Fall ist eine beschleunigte Bewegung, für die gilt
[c]s = 0.5 * a * t²[/c]
wobei 
	
	
	
	





```
s
```
 die gefallene Strecke in Abhängigkeit der Beschleunigung [c]a[/c] und der Zeit 
	
	
	
	





```
t
```
 ist.
Die Beschleunigung errechnet sich (durch das erste Newtonsche Gesetz) mit
[c]a = F / m[/c]
wobei 
	
	
	
	





```
F
```
 die Kraft ist, mit der das Objekt (in unserem Fall der Doodler) nach unten gezogen wird und 
	
	
	
	





```
m
```
 die Masse des Objektes ist.
Die Kraft 
	
	
	
	





```
F
```
 lässt sich berechnen durch
[c]F = m * g[/c]
wobei 
	
	
	
	





```
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:

```
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 
	
	
	
	





```
s
```
 die zurückgelegte Strecke in Abhängigkeit von der Geschwindigkeit 
	
	
	
	





```
v
```
 und der Zeit 
	
	
	
	





```
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 
	
	
	
	





```
t
```
 (seit Beginn des Abstoßens) so berechnen:

```
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 
	
	
	
	





```
g
```
, 
	
	
	
	





```
F
```
 und 
	
	
	
	





```
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.


----------

