如何在python/pygame中以均匀速度沿随机方向移动精灵?

如何在python/pygame中以均匀速度沿随机方向移动精灵?,python,animation,vector,random,pygame,Python,Animation,Vector,Random,Pygame,我试图以随机运动的方式移动一组球,但速度一致。我的代码允许球以随机方向移动,但速度不同。我认为这是因为random.uniform函数给出了不同的值,有些值接近0,乘以速度和时间,得到的值比接近1的值低。但在动画中,速度似乎与球的移动方向无关(如果dx和dy的值是原因,则应该是这种情况)。我知道没有标准化,但我认为,random.uniform给出了与标准化向量相同的值 我的问题是: dx和dy的随机值是速度差异的罪魁祸首吗 如何使所有球以相同的速度移动 我的代码: self.timer = p

我试图以随机运动的方式移动一组球,但速度一致。我的代码允许球以随机方向移动,但速度不同。我认为这是因为
random.uniform
函数给出了不同的值,有些值接近0,乘以速度和时间,得到的值比接近1的值低。但在动画中,速度似乎与球的移动方向无关(如果
dx
dy
的值是原因,则应该是这种情况)。我知道没有标准化,但我认为,
random.uniform
给出了与标准化向量相同的值

我的问题是:

  • dx
    dy
    的随机值是速度差异的罪魁祸首吗
  • 如何使所有球以相同的速度移动
  • 我的代码:

    self.timer = pygame.time.Clock()
    self.time_passed = self.timer.tick()
    self.speed = 0.5
    self.dx = random.uniform(-1, 1)
    self.dy = random.uniform(-1, 1)
    displacement = Vector2(
                           self.dx * (self.speed * self.time_passed),
                           self.dy * (self.speed * self.time_passed)
                           )
    
    self.pos += displacement #both vector objects
    

    谢谢你的帮助

    使用角度导出x和y

    self.angle = random.uniform(-1, 1)
    self.dy = math.sin(self.angle * math.pi/2)
    self.dx = math.cos(self.angle * math.pi/2)
    

    只需从一个具有所需长度(速度)的矢量开始,并将其旋转一个随机角度

    self.velocity = Vector2(5, 0).rotate(random.randrange(360))
    

    关于问题1,因为你给出了向量的随机x和y值,所以得到的向量都有完全不同的长度/大小,因此精灵以不同的速度移动。例如,您可以得到一个
    向量2(0,0)
    和一个
    向量2(1,1)
    (很明显,它们的长度不同)

    实际上,您可以规范化向量,然后缩放它们,但最好使用旋转方法。(长度为零的向量无法规格化。)