而循环失控的乒乓游戏

时间:2015-01-03 19:52:18

标签: c++ while-loop pong

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

1 个答案:

答案 0 :(得分:1)

这是众所周知且解决得很好的问题。 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个像素。结果是,在两台计算机上,球看起来都会以完全相同的速度移动。

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