所以我的问题是这样的:我正在做一个乒乓球游戏,球的速度是使用屏幕尺寸计算的,在我的电脑上它工作正常。当我把游戏发给朋友时,球似乎移动得非常快。我认为问题出在 while 循环中,因为我在其中放置了一个计数器来延迟游戏的开始。然而,在其他PC上,while循环似乎旋转得如此之快,以至于忽略了计数器并立即开始游戏。我的电脑无论如何都不是低端的,所以我无法弄清楚问题是什么。
这是一个众所周知且已解决的问题。80年代的简单游戏都存在这个问题。它们旨在以计算机允许的速度重新绘制屏幕,现在(假设您可以让它们运行)它们运行得非常快。游戏的运行速度不应由计算机执行while
循环的速度决定,否则您的游戏永远不会在两台计算机上播放相同的游戏。
已经解决了这个问题,通过当前运行游戏的计算机的帧速率来扩展游戏状态的进步。
在while
循环中,您需要做的第一件事是计算自上次循环迭代以来经过的时间,这将是一秒的一小部分。您的游戏状态需要提前那么长时间,而且只有那么多时间。
简单来说,如果你用这样的东西移动你的球......
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 个像素。结果是,在两台计算机上,球似乎以完全相同的速度移动。
您的所有动画都需要以这种方式缩放。