(二)pygame保证玩家在各个方面移动速率相同

前言

在专栏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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值