首页 > 解决方案 > pygame向量检查vector2长度== 0是否不起作用?

问题描述

所以我试图检查 pygame 中的 vector2 的长度是否为 0,如果不是这种情况,我想对其进行归一化并将其乘以一个数字。

以下是相关代码:

if direction.length() != 0:
    velocity = direction.normalize()
    rect.center += velocity * speed

速度和方向都是 Vector2s。

但是,此代码总是会触发并给出一个错误,即它无法对长度为 0 的向量进行归一化。

但是,当我将其稍微更改为:

if direction != pygame.math.Vector2(0,0):
    velocity = direction.normalize()
    rect.center += velocity * speed

然后它工作。

我在第一个例子中做错了吗?当我打印 Vector2.length() 时,它给了我一个值为 0 的浮点数,但不知何故这仍然通过了 if 条件。因此,我很困惑。

标签: vectorpygame

解决方案


归一化向量只不过是将向量的分量除以长度。计算向量的长度,如果不为 0,则将向量除以长度:

dir_len = direction.length()
if direction.length() != 0:
    velocity = direction / dir_len

推荐阅读