如何在我的简单游戏中控制物体的速度

问题描述 投票:0回答:1

我正在使用 win32 api 用 C++ 制作一款类似《太空入侵者》的游戏。我是初学者。

当我提高游戏 FPS 时,游戏对象在屏幕上移动得更快。我希望物体在屏幕上移动的速度相同,无论 FPS 是多少。

我使用 库来确定主游戏每秒循环多少次,并使用 sleep_for() 添加延迟以满足所需的 FPS:

std::this_thread::sleep_for(std::chrono::milliseconds(targetFrameTime - elapsedTime));

我在主循环中移动对象,如下所示:

if (userInput.get_right_key_down()) {
     rect_x = rect_x + 5;
}

如果可能的话,我宁愿不使用线程。我不太明白,也不知道我是否需要它。

c++ object winapi game-development frame-rate
1个回答
0
投票

我认为最好的办法是固定开始时间,执行sleep_for一段时间,然后使用速度因子进行移动。

const auto start = std::chrono::high_resolution_clock::now();
...
std::this_thread::sleep_for(std::chrono::seconds(1));

像这样在主循环中移动对象:

const auto end = std::chrono::high_resolution_clock::now();
const std::chrono::duration<double> elapsed = end - start;
double dt = elapsed.count();

...

if (userInput.get_right_key_down()) {
     rect_x = (int) ((double) rect_x + 5.0 * dt); // 5.0 - is the speed factor px/sec
     // but the best way is to use rect_x as a field with type of double.
     // and convert (trunc) it to the integer only on the render step
     // rect_x = rect_x + 5.0 * dt;
}
© www.soinside.com 2019 - 2024. All rights reserved.