Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在基于3d网格的环境中编程电线最有效的方法是什么?_Java_Performance_Algorithm - Fatal编程技术网

Java 在基于3d网格的环境中编程电线最有效的方法是什么?

Java 在基于3d网格的环境中编程电线最有效的方法是什么?,java,performance,algorithm,Java,Performance,Algorithm,我目前正在开发一款基于二维网格的沙盒游戏。从技术上讲,它的3D地图是一个三维阵列,网格瓷砖可以放置在彼此后面。但是,它是在二维中渲染的。游戏中的所有脚本都需要非常高效,因为我希望为android发布它 游戏将有一个主要的布线机制,允许玩家使用电线连接机器和电源。我需要一种有效的方法来计算每个电路中通过导线连接的所有实体 我能想到的唯一故障保护方法是使用泛洪填充算法从一个点开始分散并记录所有连接的对象,但我觉得这对于android应用程序来说效率太低 下面是一些关于游戏结构和连线的信息 这个游戏

我目前正在开发一款基于二维网格的沙盒游戏。从技术上讲,它的3D地图是一个三维阵列,网格瓷砖可以放置在彼此后面。但是,它是在二维中渲染的。游戏中的所有脚本都需要非常高效,因为我希望为android发布它

游戏将有一个主要的布线机制,允许玩家使用电线连接机器和电源。我需要一种有效的方法来计算每个电路中通过导线连接的所有实体

我能想到的唯一故障保护方法是使用泛洪填充算法从一个点开始分散并记录所有连接的对象,但我觉得这对于android应用程序来说效率太低

下面是一些关于游戏结构和连线的信息

  • 这个游戏是用java编写的
  • 所有对象当前都是静态的
  • 每个对象都保存在一个数组中 这反映了对象的位置。相邻对象及其应用 可以通过引用中的x/y值来访问变量 数组。这意味着可以根据需要更新相邻块
  • 玩家可以随意放置或移除电线,并且可以跟随任何 模式
  • 导线可以在所有x/y/z轴上连接到其他导线和 机器
  • 某些对象将输出功率,其他对象将使用 权力
我目前正在考虑组建有线集团 包含一组导线的所有连接对象的对象 包括电线本身。每个导线对象将包含 wireGroup ID允许将新导线(和机器)轻松添加到wireGroup

我真正需要的是一种方法,当一段电线被移除时,检测连接的对象。 在放置连接的对象时检测它很简单:只需将新导线旁边的任何机器添加到相邻导线的导线组中的列表中

拆下导线时会出现问题。由于它们可能是将两个对象连接在一起的7条或8条唯一导线路径,因此很难找到删除一条导线的效果

例如:

在这里,您可以看到连接的对象不会发生任何更改

在这里,线组将被分成两个线组,一个包含蓝色和底部白色,另一个包含两个白色

即使有人能想出一个只适用于二维的算法,那仍然是非常棒的


很抱歉,如果我遗漏了任何重要的内容,请务必告诉我,以便我可以进行补救。

假设每个节点都提供或接收电源。每根导线都带有一个或多个功率传输方向(从电源到元件)。两个连接的电源将有一条由两个内部连接表示的导线

所以你有一个有向幂图。拆下导线后,将拆下所有相关的内部连接。检查所有受导线移除影响的节点,查看它们是否有任何传入连接。如果没有,且节点之前已通电,则必须从该点开始遍历图形,并为每个节点断电


添加导线也很简单,可以检查两个节点的电源状态。每个通电的节点在另一个节点的方向上建立一个内部连接。然后,必须从另一个节点开始遍历图形,在每个节点上建立向外的连接。如果两者都未通电,则建立一个无方向的连接,该连接可能会在通电时更改。这可以非常有效地使用多个电源。

将所有“可连接”点(无论是空的、电源还是机器)都视为(断开连接的)图形中的节点。一根导线可以连接两个节点。假设每个节点都跟踪连接到它的导线,并将每条导线视为两种类型之一:“通电”和“未通电”,其中“通电”导线是向该节点传输电力的导线。每个节点以一对集合的形式跟踪这些节点。如果节点在“通电”集中有任何导线,或者节点本身是电源,则节点为“通电”

因此,有趣的问题是,如何处理添加或删除导线:

在两个节点之间放置导线时,根据另一个节点的“电源”状态,对于两个节点中的每一个,将导线放置在通电或未通电的集合中。如果结果是,此节点从未通电变为通电,则通过将导线从“未通电”移动到“通电”,在图形中适当更改节点和导线的状态

如果删除了导线,请将其从其所在的连接导线集中删除。如果任一端点节点现在有一组空的“通电”连接,则从该节点开始遍历图形,关闭所有人


这将非常有效地处理多个电源输入,只要在多个节点的状态发生变化时访问它们。如果子图中任何节点的状态发生变化,则子图中所有节点的状态都会发生变化。

老实说,我对链表知之甚少,但据我所知,我不相信它能解决多路径问题。当采取一段,它只会告诉我下一个节点和前一个节点,如果我正在做一个双链接列表。除非我检查整个列表,否则它仍然会给出相同的问题。不仅如此,链表只有两种方式,不是吗?如果我们说的是3D,一条线最多可以链接到6个其他节点,如果我们说的是2D,则可以链接到4个其他节点。编辑以提供可实现的解决方案。好的,请对编辑后的答案进行评论。可能有多个电源。这应该不是一个问题,尽管当爬树时,它会找到这些,并将它们添加到电路的总功率输出中。然而,由于您基本上是在进行洪水填充检查,因此它仍然非常低效。在我的帖子中,寻路算法的使用是不正确的,我将把它改为泛洪填充。对此很抱歉,这应该是一个比较好的消息