只是为了好玩,我一直在Pygame over break中开发一个简单的平台引擎。今天我尝试添加一些动力代码,这样玩家就不会立即停止,但是我遇到了一个问题。我的动力代码不会在所有可能的FPS速率下以恒定的速率降低玩家的速度。下面是我的代码:
def getXDisplacement(self):
pressed = pygame.key.get_pressed()
dt = self.xTimer.elapsedTime()
self.momentum = self.momentum * ( (1-self.momentumDecayRate) ** dt)
self.xDisplacement = ((self.rightKey.ifActive(pressed)-self.leftKey.ifActive(pressed)) + self.momentum)
self.momentum = self.xDisplacement
self.xDisplacement *= dt
self.xDisplacement = numpy.clip(self.xDisplacement, -700*dt, 700*dt)
self.xTimer.reset()
为了降低FPS速度,我将在getXDisplacement()
函数的顶部添加一个print()
函数,并注解掉底部的numpy.clip()
函数,以查看总体速度如何受到影响。玩家加速慢得多,不能达到与高FPS速率相同的速度。我无法想象为什么指数衰减函数在这里不起作用。我是否使用不当,或者问题比我想象的更复杂?以下是完整程序的链接,以供参考:https://github.com/2Amateurs/SimplePygamePlatformer.
1条答案
按热度按时间q0qdq0h21#
您可以使用pygame时钟来限制最大FPS:
如果你确定你的游戏不会慢于30FPS,这已经足够了。如果不是,你可以用时钟来计算最后一帧和这一帧之间的时间差。
tick_busy_loop
不是唯一的方法,还可以查看Clock.get_time。