所以我有一段舊的代碼,在實現Java遊戲跳轉時使用。爲什麼C++中的clock_gettime給了我與Java nanotime相比不同的值()
它看起來是這樣的:
//Vars
final int Y_ZERO_POINT = 580;
double height = 0, speed = 4;
public static final double gravity = 9.81;
double x = 25;
int y = (int) (Y_ZERO_POINT-(height*100));
long previous, start = 0;
// Code in my game loop
start = System.nanoTime();
if(previous != 0 && up){
double delta = start - previous;
height = (height + (delta/1000000000) * speed);
speed -= (delta/1000000000) * gravity;
y = (int) (Y_ZERO_POINT-(height * 100));
}
previous = start;
現在我想要實現在C++遊戲類似的東西。 在這裏閱讀:http://www.javacodegeeks.com/2012/02/what-is-behind-systemnanotime.html 我瞭解到Java System.getNanoTime()
在Linux系統中使用clock_gettime(CLOCK_MONOTONIC, &ts);
。
所以我用它在我的C++代碼,並實現了相同的跳碼: https://github.com/Veske/CPP-Learning/blob/master/kodutoo3/player/player.cpp
而且差別是很大的。在Java中,跳轉總是一致的,並且像它應該結束一樣。在我的C++程序中,跳轉有時就像在Java中一樣,但大多數情況下它會發生根本性的變化。我從clock_gettime()
得到的時間有時會跳很多,並且導致遊戲中的自我跳躍也顯得非常隨機。角色有時會跳出屏幕,然後再次正常跳轉。
是否有可能從C++時間函數獲得一致的結果,就像在Java中一樣,還是應該考慮對我的跳躍機制使用不同的方法?
核心問題是,你只看着tv_nsec字段,這只是小數秒。您還需要將它與tv_sec字段結合使用。但推薦的解決方案是使用,如@ 865719所示 –