SDL游戏中玩家移动的速度

Speed of player movement in SDL game

我一直在写一个游戏,我把它放在 github 上供其他人玩,但我在 运行 玩游戏时遇到了硬件方面的问题。

当我 运行 使用专用 GPU 玩游戏时,玩家移动完美,但如果我 运行 在集成显卡的笔记本电脑上玩游戏,那么玩家移动似乎非常缓慢。但是,我添加了一个播放器速度按钮,如果我提高播放器速度,那么播放器会再次完美移动。我不明白的是,为什么播放器在笔记本电脑上移动缓慢,但如果我改变播放器的速度,她应该如何移动?有没有办法检测是否没有安装专用 GPU,所以我可以将速度设置得稍微高一点?谢谢。

因为没有密码 post,我帮不上什么忙。我会告诉你我怀疑的问题是什么。

你在做正确的增量时间步长吗?如果你的游戏循环看起来像

while (not quit) {
    readInput();
    runSimulation();
    render();
    sleep(16.666); // Or whatever you want here
}

这会很糟糕,因为游戏会 运行 根据硬件的能力而有所不同。如果您的游戏在好的 GPU 上渲染需要 1 毫秒,但在差的 GPU 上渲染需要 10 毫秒,那么您自然会 运行 变慢,因为每个“游戏循环”在一台机器上需要更长的时间。

你可以做的是找出所有事情的时间量 运行,然后将你自己延迟一些时间,以便它总和达到你的目标 FPS。

例如,您计算读取输入、运行模拟和渲染需要多长时间,将其分配给 timeTaken,如果您的目标是 60 fps,那么您会做 16.666 - timeTaken .这样,无论计算机如何,每一帧都将花费完全相同的时间。

这也不是最好的方法(我已经看到它有问题),还有比这更好的方法,所以请进行研究,但这是在您的问题结束之前快速回答。参见 this for more info, or search up Timesteps on Gamedev Stackexchange