在我的基于图 block 的自顶向下游戏中,有点像 Terraria,我需要在特定情况下有效地更新图 block 。我目前正在处理的情况是在图 block 之间绘制连接。
我所说的连接是指根据每个图 block 的位置在每个图 block 的顶部绘制一个叠加层,因此如果图 block 在一个角上,它就会有一个角层叠加层连接到其他叠加层。有点像 Minecraft 中的连接纹理,而不是最有可能在任何拼贴游戏中连接的纹理。
我现在遇到的问题是如何处理覆盖更新。例如,如果我破坏了一个瓦片,则必须更新所有相邻瓦片的叠加层,因为不再有瓦片可以连接。这部分很简单,因为我可以做这样的事情:
updateOverlay(x+1, y);
updateOverlay(x-1, y);
updateOverlay(x, y+1);
updateOverlay(x, y-1);
这就是问题所在。如果当我调用 updateOverlay(x+1, y) 时会发生什么情况,这种变化的叠加使得与该图 block 相邻的图 block 需要叠加更新,如果一个那些相邻的瓷砖会导致同样的事情吗?然后是一串巨大的更新。
我尝试了类似下面的递归实现:
public boolean updateOverlay(int x, int y){
changeOverlayAccordingly();
if(overlayHasChanged) return true;
updateOverlay(x+1, y);
updateOverlay(x-1, y);
updateOverlay(x, y+1);
updateOverlay(x, y-1);
return false;
}
if(overlayHasChanged) 语句本应阻止无限递归循环的发生,但它实际上没有做任何事情,因为我仍然遇到堆栈溢出错误。此外,问题的递归解决方案可能不是最好的,因为它不会那么稳定。
再一次,我知道我可以只更新所有相邻的叠加层并完成它,但是如果这些更新导致需要更多更新怎么办?
[2] [6]
[1][x][3][5][8]
[4] [7]
为了进一步说明我的观点,请看上图。
如果 [x] 是正在更新的原始叠加层,则 [1] [2] [3] 和 [4] 也将被更新。但是,如果 [3] 更改为 [5] 也需要和更新,会发生什么情况?如果 [5] 随后发生变化,使得 [6] [7] 和 [8] 需要更新,会发生什么情况?
是否有任何其他解决方案来处理更新图 block 叠加层?
任何帮助将不胜感激
最佳答案
您需要的是正确看待事物。优先考虑某些更新,您将避免无限循环。我会尝试自上而下更新它,然后检查是否一切正常;然后,只是调整一些点。
但是,那么,为什么你甚至需要更新链上的东西?如果它是一次一个方 block 的操作,则不可能在大于一个方 block 的半径上发生变化。 (请解释,我会相应地进行编辑)。如果它涉及破坏相邻的图 block ,请尝试从中心到边界,忽略指向中心的 block 。
关于java - 高效地处理所有游戏图 block 更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23556472/