我尝试随机移动一组球,但速度均匀。我的代码让球在随机方向上移动,但速度不同。我认为这是因为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
感谢您的帮助!
答案 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方法。 (长度为零的向量无法归一化。)