gpt4 book ai didi

python - 如何在 pygame 中检查直线和矩形之间的碰撞?

转载 作者:行者123 更新时间:2023-12-01 07:53:01 26 4
gpt4 key购买 nike

我目前正在使用 pygame 在 python 中创建一个游戏,我的 AI 目前正在透过墙壁“看到”我的角色并向其射击,但 AI 不应该射击。所以我的问题是:如何防止这种情况发生?我考虑过线碰撞,其中线从我的 AI 到我的角色,如果这条线碰撞墙壁,那么这个 AI 不会射击。任何帮助将不胜感激,非常感谢!

最佳答案

这是一个很好的问题!

你的矩形可以被认为是 4 条线:

(x, y)        → (x+width, y)        # top
(x+width, y) → (x+width, y+height) # right
(x, y+height) → (x+width, y+height) # bottom
(x, y) → (x, y+height) # left

沿着相交线,可以使用 two-lines intersecting formula确定这些线是否相交(但要小心平行线!)

但是,公式(在链接的维基百科文章中指定)确定直线是否在 2D 平面上的任何位置相交,因此需要进一步细化。显然,代码可以快速丢弃窗口尺寸之外发生的任何交叉点。

一旦确定了“无限平面”碰撞点(这是一个相当快的确定),就可以确定更细粒度的相交。使用Bresenham's algorithm ,枚举相交线上的所有点,并将它们与基于正方形每条边的 1 像素矩形进行比较。这将告诉您矩形的哪条边相交。

如果您只需要知道矩形是否被击中,只需使用pygame.Rect.collidepoint()检查整个矩形即可。对于线上的每个点。

enter image description here

当然,一旦生成了所有这些点,就很容易不用担心 2D 线碰撞,但对于长线,代码必须进行大量检查。因此,首先测试 2D 交集确实可以加快速度。

关于python - 如何在 pygame 中检查直线和矩形之间的碰撞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56100547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com