我目前正在开发基于 2D 网格的沙盒类型游戏。从技术上讲,它作为地图的 3D 是一个 3 维数组,其中网格图块可以相互放置。然而,它以 2D 形式呈现。游戏中的所有脚本都需要非常高效,因为我希望为 android 发布它。
游戏将有一个主要的布线机制,允许玩家使用电线将机器连接到电源。我需要一种有效的方法来计算每个电路通过电线连接的所有实体。
我能想到的唯一故障安全方法是使用洪水填充算法从一个点展开并记录所有连接的对象,但我觉得这对于 android 应用程序来说效率太低了。
以下是有关游戏结构和线路的一些信息。
- 游戏是用java编写的。
- 所有对象当前都是静态的。
- 每个对象都保存在一个反映对象位置的数组中。只需引用数组中的 x/y 值即可访问相邻对象及其变量。这意味着可以根据需要更新相邻块。
- 玩家可以随意放置和移除电线,并且可以遵循任何模式。
- 电线可以在所有 x/y/z 轴上连接到其他电线和机械。
- 某些物体会输出能量,而其他物体会使用能量。
我目前正在考虑让wireGroup对象包含一组电线的所有连接对象,包括电线本身。每个连线对象都将包含连线组 ID,从而可以轻松地将新连线(和机器)添加到连线组中。
我真正需要的是一种在移除一根电线时检测连接对象的方法。在放置时检测连接的对象很简单:只需将新线旁边的任何机械添加到相邻线的线组中的列表中。
拆线时出现问题。由于它们可能是将两个对象连接在一起的 7 或 8 条独特的导线路径,因此很难找到移除一根导线的效果。
例如:
在这里您可以看到连接的对象不会发生任何更改。
在这里,wireGroup 将被分成两个wireGroup,一个包含蓝色和底部白色,一个包含两个白色。
即使有人可以提出仅二维的算法,那仍然很棒。
对不起,如果我错过了任何重要的事情,请告诉我,以便我可以弥补。