前言
在专栏pygame游戏开发中的第一篇文章中讲解了增量时间的利用,可以使玩家的移动速率不受帧率的影响。但是存在一个问题是玩家斜着移动的时候速率明显更快。
看一下玩家移动的逻辑
玩家坐标.x += 移动方向 * 速度 * dt
玩家坐标.y += 移动方向 * 速度 * dt
这里的移动方向如果是x或y轴正方向则为+1,负方向为-1,但是速度是矢量,当玩家坐标x和y同时更新的时候,斜着的移动速度就如下图所示。
解决方案
将玩家移动方向设置为方向向量,检测按键按下时候,给方向向量赋值,当方向向量长度大于0时将方向向量归一化处理(向量转换为一个新的向量,这个新向量的方向与原有方向向量相同,但长度(或模)被调整为1),这样等同于把速度给分解了。代码思路如下
# 玩家移动方向
self.direction = pygame.math.Vector2()
# 如果方向向量长度大于0才执行相关动作
if self.direction.magnitude() > 0:
self.direction = self.direction.normalize() # 归一化
self.player_rect.x += self.direction.x * self.speed * dt
self.player_rect.y += self.direc