如何让我的随机移动对象在pygame中以特定角度移动

Posted

技术标签:

【中文标题】如何让我的随机移动对象在pygame中以特定角度移动【英文标题】:How can i make my randomly moving object move in a specific angle in pygame 【发布时间】:2021-04-28 13:07:01 【问题描述】:

Full Code

self.VEL = 3
self.RAND = numpy.linspace(-self.VEL, +self.VEL, 100)  # calculating value between -2 and 2, a total of 100 values
-----------------------------------------
if self.new_line:
    self.deltax = random.choice(self.RAND)
    self.deltay = random.choice(self.RAND)
    self.new_line = False
self.move(self.deltax, self.deltay)
-----------------------------------------
def move(self, deltax, deltay):
    self.x += deltax
    self.y += deltay

我目前正在使用 pygame 在 python 中构建一个蚂蚁模拟器。蚂蚁从中间开始,然后从那里随机移动。运动是这样进行的。每隔几毫秒将self.new_line 设置为True。然后计算出一个新的self.deltaxself.deltay。现在,只要 self.new_line 为 False,我的 ant 每次迭代都会随着 self.x += deltaxself.y += deltay 移动。当self.new_line 再次为True 时,ant 将使用self.deltaxself.deltay 的新值开始一个新行。 deltax 和 deltay 的值介于 -2 和 +2 之间,这意味着蚂蚁可以在各个角度移动。

Visualization

问题:

    但是我希望我的蚂蚁只以特定的角度移动。 Like This

我该怎么做?

    如果你用 on ant 运行程序,你会看到 ant 的速度随着换行而改变。如何让我的蚂蚁有一个一致的速度?

    我怎样才能让我的蚂蚁以特定的角度反弹墙壁?

感谢您的帮助。

【问题讨论】:

【参考方案1】:

这是多个问题。目的是只问一个问题。我只会回答其中的 2 个。 使用pygame.math.Vector2rotate()生成指定范围内长度和角度恒定的方向向量:

if self.new_line:
    angle = random.randint(-45, 45)
    direction_vector = pygame.math.Vector2(0, -self.VEL).rotate(angle)
    self.deltax = direction_vector.x
    self.deltay = direction_vector.y

【讨论】:

以上是关于如何让我的随机移动对象在pygame中以特定角度移动的主要内容,如果未能解决你的问题,请参考以下文章

Pygame 生涩的玩家运动

如何在opengl和pygames中使用键盘键移动多维数据集?

定时器如何在pygame中工作? [复制]

如何让我的 X 按钮删除数组中的特定对象?

在 Pygame 中每隔几秒移动一个对象

ARKit - 最初在 ARSKView 中以某个航向/角度从相机放置对象