如何划分巨型3D立方体的处理?

时间:2013-11-25 15:04:48

标签: java nested-loops minecraft

我不确定如何提出这个问题,所以如果您可以编辑它以便更容易理解,那就太棒了。

我试图在java(一个40*40*40多维数据集中处理3D世界中的大量点,所以总共64000点)。我想将以下三维for循环划分为可能10*10*10段,而不是每隔几个循环运行一次,以便可以执行其他操作,因此它不会很慢。我尝试使用线程,但由于我的程序同时访问了两个东西,因此不断破坏。

这是我的代码:

for (int x = 0; x < 40; x++) {
    for (int y = 0; y < 40; y++) {
        for (int z = 0; z < 40; z++) {
            //Do stuff with x, y, and z
        }
    }
}

2 个答案:

答案 0 :(得分:1)

听起来你正在努力实现与BlockBreaker中的逻辑类似的东西。

基本上不是使用循环40次的3个嵌套for循环,而是从中心开始并使用3个嵌套for循环来调度块坐标,每个循环循环3次(每个方向从当前块开始一个块)。调用逻辑时,您还需要启动一个tick处理程序,用于监视已调度块的列表,并使用3个嵌套循环继续搜索要处理的新块。

每次调度一个块时,你都会增加一个计数器,当计数器达到一定限度时,你的tick处理程序返回true以允许游戏循环继续。您的逻辑需要跟踪当前块距离原点的距离,并且只添加范围内的块。

除了调度块之外,您的tick处理程序还将处理它们并将它们从计划列表中删除。一旦你的列表为空,你的tick处理程序应该返回false以停止接收滴答。


这是一个难以在帖子中解释的概念,所以如果您在理解课堂中的逻辑时遇到任何问题,请随时在MCF论坛,Twitter(与此处相同的昵称)或irc.esper.net #treecapitator上与我联系。我链接到上面。

答案 1 :(得分:0)

如果你在主线程上处理3个for循环,它肯定会减慢其他进程的速度。尝试在不同的线程中处理整个数据,并在处理完数据后立即通知主线程。它仍然需要时间,但肯定不会阻止你的主线程。