【问题标题】:How do I move sprites in random directions but with uniform speed python/pygame?如何在随机方向上移动精灵但速度一致的python / pygame?
【发布时间】:2017-07-05 14:23:20
【问题描述】:

我尝试随机移动一组球,但速度一致。我的代码让球在随机方向上移动,但速度不同。我认为这是因为 random.uniform 函数给出了不同的值,有些接近 0,乘以速度和时间,得到的值低于接近 1 的值。但在动画中,速度似乎并没有关系球运动的方向(如果dxdy 的值是原因,则应该是这种情况)。我知道 anout 归一化,但我认为 random.uniform 给出的值与归一化向量相同?

我的问题是:

  1. dxdy的随机值是速度差异的罪魁祸首吗?
  2. 有什么方法可以让所有的球都以相同的速度运动?

我的代码:

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

感谢您的帮助!

【问题讨论】:

    标签: python animation vector random pygame


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      只需从具有所需长度(速度)的向量开始,然后将其旋转任意角度。

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

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

      您实际上可以对向量进行归一化,然后对其进行缩放,但最好使用旋转方法。 (长度为零的向量无法归一化。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-23
        • 1970-01-01
        相关资源
        最近更新 更多