所以我的问题是这样的:我正在进行一场乒乓球比赛,并且使用屏幕尺寸来计算球的速度,并且在我的PC上它可以正常工作。当我将游戏发送给朋友时,球似乎移动得非常快。我认为问题出在while循环中,因为我在其中放置了一个计数器来延迟游戏的开始。然而在其他PC上似乎while循环旋转如此之快,它一起忽略了计数器并立即启动游戏。无论如何我的电脑都不是低端的,所以我无法弄清问题是什么。
答案 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个像素。结果是,在两台计算机上,球看起来都会以完全相同的速度移动。
所有动画都需要以这种方式缩放。