我制作一个简单的游戏并且我想要将角色的动画/移动链接到帧之间的时间,以便在一秒钟内角色移动相同的距离,无论FPS是什么。这是我必须尝试这样做的代码。
public void getVels()
{
if (isAirbourne && accely < terminalVel)
{
accely += gravity;
}
vely = accely;
vely = vely * getFrameTime();
System.out.println(getFrameRate() + " " + getFrameTime() + " " + vely);
}
public static long getTime()
{
return Sys.getTime() * 1000 / Sys.getTimerResolution();
}
public static float getTimeSinceLast()
{
if (first)
{
currentFrame = getTime();
first = false;
timeSinceLast = 1;
}
else
{
lastFrame = currentFrame;
currentFrame = getTime();
timeSinceLast = currentFrame - lastFrame;
}
return timeSinceLast;
}
public static float getFrameTime()
{
return timeSinceLast * multiplier;
}
public static void updateClock()
{
getTimeSinceLast();
}
然而,与10FPS相比,游戏仍然以100FPS快速运行10倍,尽管它不应该。任何帮助/提示?
在1000 fps的getframetime时间为0.01, 如果accely = 1,则vely * getframetime将为0.01。
at 100fps getframetime是0.1,所以加上1,vely * getframetime应该是0.1
在fx小10倍时比0.01大10倍,所以每秒行进的距离应该相同吗?
解决方案:
if (isAirbourne && accely < terminalVel)
{
accely += gravity * getFrameTime;
}
而不是
if (isAirbourne && accely < terminalVel)
{
accely += gravity;
}
没有调整重力加速度。