While 循环失控 Pong 游戏

While loop out of control Pong game

所以我的问题是:我正在制作乒乓球游戏,球的速度是使用屏幕尺寸计算的,在我的电脑上它运行良好。当我将游戏发送给朋友时,球似乎移动得非常快。我认为问题出在 while 循环中,因为我在其中放置了一个计数器来延迟游戏的开始。然而,在其他 PC 上,while 循环似乎旋转得如此之快以至于完全忽略了计数器并立即开始游戏。我的电脑无论如何都不是低端的,所以我无法弄清楚问题是什么。

这是众所周知且已很好解决的问题。 80 年代的简单游戏都存在这个问题。它们旨在以您的计算机允许的最快速度重绘屏幕,现在(假设您可以让它们达到 运行)它们 运行 快得无法播放。您的游戏 运行 的速度不应由您的计算机执行 while 循环的 的速度决定,否则您的游戏将永远不会在两台电脑。

几十年来,游戏通过根据当前 运行 正在玩游戏的计算机的帧速率来缩放游戏状态的进步,从而解决了这个问题。

您需要在 while 循环中做的第一件事是计算自循环的 last 迭代以来经过的时间,这将是一秒。你的游戏状态需要提前这么多时间,只有那么多时间。

简单来说,如果您使用类似这样的方式移动球...

ball_x += ball_horizontal_momentum
ball_y += ball_vertical_momentum

您需要通过由经过多长时间确定的比例因子来修改每个动量:

ball_x += ball_horizontal_momentum * elapsed_time
ball_x += ball_vertial_momentum * elapsed_time

因此,在速度非常慢的计算机上,您的球最终可能每帧跳跃 100 像素。在速度快 10 倍的计算机上,您的球每帧将移动 10 个像素。结果是,在两台计算机上,球的移动速度似乎完全相同。

您的所有动画都需要以这种方式缩放。