如何以随机方向移动精灵但速度均匀的python / pygame?

时间:2017-07-05 14:23:20

标签: python animation vector random pygame

我尝试随机移动一组球,但速度均匀。我的代码让球在随机方向上移动,但速度不同。我认为这是因为random.uniform函数给出了不同的值,有些接近于0,乘以速度和时间,给出的值低于接近1的值。但是在动画中速度似乎不是与球行进的方向联系在一起(如果dxdy的值是原因,应该是这种情况)。我知道不正常化,但我认为random.uniform给出与标准化向量相同的值?

我的问题是:

  1. dxdy的随机值是速度差异的罪魁祸首吗?
  2. 让所有球以相同的速度移动的方法是什么?
  3. 我的代码:

    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
    

    感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

使用角度导出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)

答案 1 :(得分:1)

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

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

关于问题1,由于给出了向量随机x和y值,因此得到的向量将具有完全不同的长度/幅度,因此精灵以不同的速度移动。例如,您可以获得Vector2(0, 0)Vector2(1, 1)(显然它们的长度不同)。

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