對於Jump'n'Run比賽不同,我試圖做一個跳躍,我發現這個功能。 的問題是,幀率(time_diff)是系統的不同所以有時它如實施例1,有時是10跳轉功能 - 高度幀率
現在,這個功能將基於幀速率
public void jump() {
ySpeed = -100;
}
// time_diff is time difference between this and last frame
public void update(double time_diff) {
y = y - ySpeed * time_diff;
ySpeed = ySpeed + 9.81 * time_diff;
}
導致我的字符跳躍不同的高度
這裏也是幀率4和20的示例(這些值不準確,因爲我除以20它們),但你看到,與幀速率20它跳到更高(進一步)作爲幀速率4.
那麼我怎樣才能存檔它跳躍高度總是不變,不管幀率如何?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 編輯 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
我解決它像這樣蒙山的luk2302幫助:
double remaining_time = 0;
final double step_size = 4;
public void jump() {
ySpeed = -100;
}
// time_diff is time difference between this and last frame
public void update(double time_diff) {
remaining_time += time_diff;
while (remaining_time >= step_size) {
update_helper(step_size);
remaining_time -= step_size;
}
}
public void update_helper(double time_diff) {
y = y - ySpeed * time_diff;
ySpeed = ySpeed + 9.81 * time_diff;
}
試圖最大化'y'的新價值,反對'y'原值? –
這是講好你的主題:https://www.youtube.com/watch?v=hG9SzQxaCm8 – Andreas