Answers:
在流氓社区中,针对该问题已经做了很多工作。
这是列出一些可能对您有帮助的算法和库的页面。 http://roguebasin.roguelikedevelopment.org/index.php?title=Field_of_Vision
这不是一个完整的答案,但希望能有所帮助。
您的地图/拼贴设置为静态还是动态?如果它是静态的,我强烈建议您进行离线处理并尽可能地进行预计算。您可以按照自己想要的任何方式进行操作(光线投射或更智能的操作),但是您并不真正在意制作速度很快,因为在“烘焙”关卡时,一切都会离线进行。您可以精确地预先计算从每个点可见的图块,或者创建某种较大的区域以及从每个区域可能可见的所有图块。
然后,在运行时,对可见图块的查询应该非常简单且非常快速。
当然,如果您具有动态创建的级别,那么这根本不适用:-)
我不确定您使用的平台是什么,但是我真的想不出任何没有足够快的平台来围绕您的广播实体绕圈(除非有很多em)并检测是否您的圆形算法中将要“绘制”的图块是一个实体图块,因此是遮光的。从那里开始,这将有些棘手,因为您必须跟踪是否存在被遮挡的圆弧段,但这就是我会做的。另一种选择是将光线投射到瓷砖分辨率空间中(再次非常快)成圆形,并在每条光线撞击到实心瓷砖时停止。