在基于图块的游戏中查找无遮挡的图块


9

我正在开发基于2D瓦片的游戏,现在我正在尝试使相当于2D的阴影体积起作用。我在寻找应该投射阴影的表面时遇到了麻烦。从游戏的任何点开始,我都需要找到未被遮挡的面孔或整个瓷砖。

我的问题是,如何在给定一个点的情况下尽快找到这些瓷砖/边缘?

该图显示了总体视线和受影响的瓷砖

Answers:



2

这不是一个完整的答案,但希望能有所帮助。

您的地图/拼贴设置为静态还是动态?如果它是静态的,我强烈建议您进行离线处理并尽可能地进行预计算。您可以按照自己想要的任何方式进行操作(光线投射或更智能的操作),但是您并不真正在意制作速度很快,因为在“烘焙”关卡时,一切都会离线进行。您可以精确地预先计算从每个点可见的图块,或者创建某种较大的区域以及从每个区域可能可见的所有图块。

然后,在运行时,对可见图块的查询应该非常简单且非常快速。

当然,如果您具有动态创建的级别,那么这根本不适用:-)


1

您可以在这里看到我是如何为C#roguelike实现此功能的。该代码不是高度优化的,但是对我来说似乎足够快,并且(更重要的是)应该相当容易阅读。它基本上是在做一个简单的阴影投射算法,一次可以工作一个八分圆。


0

我不确定您使用的平台是什么,但是我真的想不出任何没有足够快的平台来围绕您的广播实体绕圈(除非有很多em)并检测是否您的圆形算法中将要“绘制”的图块是一个实体图块,因此是遮光的。从那里开始,这将有些棘手,因为您必须跟踪是否存在被遮挡的圆弧段,但这就是我会做的。另一种选择是将光线投射到瓷砖分辨率空间中(再次非常快)成圆形,并在每条光线撞击到实心瓷砖时停止。


好吧,我主要做Flash和Javascript游戏,但是目前,我做的是一种蛮力方法,此方法在一段时间后开始陷入困境。我想如果我能弄清楚如何对其进行优化,就能使这款游戏运行得相当顺利。
瑞安·S

它应该可以在Flash中轻松实现,也许可以优化您的蛮力。同样,通常,您不必每帧都更新一次,因此您可以预先计算几个帧的下一个情况
Kaj 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.