为什么时钟用C++;与Java nanotime()相比,给出了不同的值
所以我有一段旧代码,我在Java游戏中实现跳转时使用它 它看起来像这样:为什么时钟用C++;与Java nanotime()相比,给出了不同的值,java,c++,Java,C++,所以我有一段旧代码,我在Java游戏中实现跳转时使用它 它看起来像这样: //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
//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++游戏中实现类似的东西。
在这里阅读:
我了解到JavaSystem.getNanoTime()
使用clock\u gettime(clock\u MONOTONIC,&ts)代码>在Linux系统中
<>我在C++代码中使用了它,实现了相同的跳转代码:
差别是巨大的。在Java中,跳转始终是一致的,并以应有的方式结束。在我的C++程序中,跳转有时就像java一样,但大部分都会发生根本性的变化。我从clock\u gettime()
获得的时间有时会跳跃很多,这导致游戏中的跳跃本身看起来也非常随机。角色有时可以跳出屏幕,然后下一次正常跳转
是否有可能从C++函数中得到一致的结果,就像java一样,或者我应该考虑使用不同的方法来跳转吗?< /p> < p>如果你有C++ 11编译器,你可以使用便携头。
[]
对于时差测量,确保使用不可调(又称单调)的时钟。更多信息。核心问题是,您只需查看电视屏幕上的秒数字段。您还需要将其与tv_sec字段相结合。但是推荐的解决方案是使用@865719,就像一个符咒!非常感谢。
#include <iostream>
#include <chrono>
using namespace std;
int main()
{
auto t0 = chrono::steady_clock::now();
auto t1 = chrono::steady_clock::now();
auto dt = t1 - t0;
cout << "t0: " << chrono::time_point_cast<chrono::nanoseconds>(t0).time_since_epoch().count() << " ns" << endl;
cout << "t1: " << chrono::time_point_cast<chrono::nanoseconds>(t1).time_since_epoch().count() << " ns" << endl;
cout << "dt: " << chrono::duration_cast<chrono::nanoseconds>(dt).count() << " ns" << endl;
return 0;
}
t0: 2800906746162 ns
t1: 2800906746345 ns
dt: 183 ns