如何在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)
(很明显,它们的长度不同)
实际上,您可以规范化向量,然后缩放它们,但最好使用旋转方法。(长度为零的向量无法规格化。)