我目前正在用 pygame 用 python 创建一个游戏,我的人工智能目前正在透过墙壁“看到”我的角色并向它射击,但人工智能不应该射击。所以我的问题是:如何防止这种情况发生?我考虑过线碰撞,其中线从我的 AI 到我的角色,如果这条线碰撞墙壁,那么这个 AI 不会射击。任何帮助将不胜感激,非常感谢!
这是一个很好的问题!
\n\n你的矩形可以被认为是 4 条线:
\n\n(x, y) \xe2\x86\x92 (x+width, y) # top\n(x+width, y) \xe2\x86\x92 (x+width, y+height) # right\n(x, y+height) \xe2\x86\x92 (x+width, y+height) # bottom\n(x, y) \xe2\x86\x92 (x, y+height) # left \nRun Code Online (Sandbox Code Playgroud)\n\n考虑相交线,可以使用两条线相交公式来确定这些线是否相交(但要小心平行线!)
\n\n然而,公式(在链接的维基百科文章中指定)确定线是否在 2D 平面上的任何位置相交,因此需要进一步细化。显然,代码可以快速丢弃窗口尺寸之外发生的任何交叉点。
\n\n一旦确定了“无限平面”碰撞点(这是相当快的确定),则可以确定更细粒度的相交。使用Bresenham 算法,枚举相交线上的所有点,并将它们与基于正方形每条边的 1 像素矩形进行比较。这将告诉您矩形的哪条边相交。
\n\n如果您只需要知道矩形是否被击中,只需检查整个矩形线上pygame.Rect.collidepoint()的每个点即可。
当然,一旦生成了所有这些点,就很容易不用担心 2D 线碰撞,但对于长线,代码必须进行大量检查。因此,首先测试二维交叉确实可以加快速度。
\n| 归档时间: |
|
| 查看次数: |
5776 次 |
| 最近记录: |