如何使用直线相交制作AI?

时间:2019-07-19 15:36:51

标签: python

我正在用python制作一个简单的2D游戏。我是python的新手,所以我不太了解所有复杂的东西。目前,我正在努力为僵尸创建AI,以在远处攻击并跟随他们的玩家,并且仅在它们在视线内时才这样做。我有一个全部设置的圆形瞄准镜,并且对象是不透明和透明的。目前,我无法弄清楚如何使僵尸仅在玩家不在不透明物体后面时才追逐玩家。 (一旦问题解决,我还将添加更多的AI,如果玩家在看到它们之后落后于某个东西,它们仍将使僵尸追赶他们。)

我尝试简单地在播放器和僵尸之间画一条线(这是不可见的),但是线条不被视为具有自己特殊数据的普通对象,因此我无法使用colliderect()函数检查碰撞。我需要知道如何检测与对象相交的线段。

我希望这种情况发生:

This

不确定如何实现:P

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

区分透明对象和不透明对象很简单:检查视力障碍时,只需从考虑列表中删除透明对象即可。

我质疑您的陈述:“线不被视为具有其特殊数据的普通对象,因此我无法检查...”。 创建了该行;您可以根据需要提供任何属性。最糟糕的是,如果您使用的模块尚未指定,则可以使用自己的数据来增强对象,或者将行替换为可以形成的最细的矩形。

如果您不喜欢这样做,请研究已知的对象交集方法。半个世纪以来,块状世界中的视觉处理已得到很好的处理。如果您的对象都是多边形,则可以在C ++ BOOST库polygon包中轻松使用该技术。如果它们是矩形,则可以检查线段的交点。您可以在每个边缘“截断”视线,并查看是否还有视线剩余,这将表明相交。

这会让你动起来吗?