# Jump 'n run die 2. [spielerbewegen mit zeit]



## DarKestSun (9. Apr 2005)

ok ich programmier grad an nem jump n run spiel

die frames soll man einstellen können, daher stellt sich die frage wie viel pixel mein spieler pro frame laufen soll
ein fester wert geht nicht, weil man bei mehr frames schneller laufen würde

ich möchte das gerne zeitabhängig programmieren, d. h. ich rechne mir die zeit pro schleifendurchlauf aus und abhängig davon soll der spieler sich bewegen

auch springen soll so funktionieren, mit phys. formeln wenn möglich weil es realisitsch werden soll

hat jemand ne ahnung was ich beachten muss? weiß es klingt simpel aber es geht nicht


----------



## Illuvatar (9. Apr 2005)

v=s/t
s=v*t

klar? (zeitdiff berechnen, mit geschw. multiplizieren)


----------



## Hansdampf (9. Apr 2005)

mach es am besten zeitunabhängig, da wirst du irgendwann eh landen. 
+ du hast immer maximale fps, die spielfiguren bewegen sich aber immer mit gleicher geschw.

grundlegende "gameloop" : (wahrsch. mit syntaxfehlern)


```
long t(){return System.currentTimeMillis();}
long alt=t();

while(true){
float dif=(t()-alt)/1000f;
alt=t();
move(dif);
paint();
}


void move(float delta){
pos+=v*delta;
.
.
.
}
```


----------



## Reality (10. Apr 2005)

```
x += dx * elapsedTime;
        y += dy * elapsedTime;
```

dx und dx ist die Schnelligkeit.
Wenn der Rechner schnell ist, dann ist elapsedTime dementsprechend niedrig, weil ja weniger Zeit bis zum nächsten Frame vergeht. Wenn der Rechner langsam ist, ist elapsedTime höher und der Spieler macht dann auch größere Schritte.

Liebe
Grüße Reality


----------



## DarKestSun (10. Apr 2005)

ja schon klar, hab die frage auch falsch formuliert wahrscheinlich

bei fall - und sprung sachen also mit formeln wie

y = v * time - g * time²

geht das nich mehr, weil diese formeln eine fortlaufende zeit brauchen
1s, 2s, 3s, 4s

versteht ihr? die zeit seitdem man mit dem sprung angefangen hat, weil y erst dann negativ wird wenn time wächst, weil wenn time immer 1s wäre, also 1 sekunden takt wie ihr oben geschrieben habt, dann geht die formel nich

man braucht fortlaufende zeit, und die zu kriegen is schwer


----------



## Hansdampf (10. Apr 2005)

> y = v * time - g * time²


so macht man das dann auch nich,

geschw.x+=delta*beschleunigung.x
geschw.y+=delta*beschleunigung.y
pos.x+=delta*geschw.x
pos.y+=delta*geschw.y

z.B. beim Sprung:
beschleunigung.y=10; setzen (einmal!)

dann in der Schleife: 
beschleunigung.y-=9.81*delta
if(pos.y<=0){beschleunigung.y=0;gesch.y=0;}
(Physik Unterstufe)


----------



## Reality (10. Apr 2005)

Mit elapsedTime meine ich die Zeit die von Framegenerierung zu Framegenerierung vergangen ist. Die misst also jedes Mal die Zeit neu, wenn du ein Frame zeichnest und multiplizierst es damit.

Liebe Grüße
Reality


----------

