【发布时间】:2014-05-09 04:11:46
【问题描述】:
在我的基于图块的自上而下游戏中,有点像泰拉瑞亚,我需要在特定情况下有效地更新图块。我目前正在处理的情况是在图块之间绘制连接。
通过连接我的意思是根据每个图块的位置在每个图块的顶部绘制一个叠加层,因此如果图块位于角落,它将有一个角叠加层连接到其他叠加层。有点像 Minecraft 中的连接纹理,而不是任何瓷砖游戏中的连接纹理。
我现在遇到的问题是如何处理更新覆盖。例如,如果我破坏了一个图块,则必须更新所有相邻图块的叠加层,因为不再有要连接的图块。这部分很简单,因为我可以这样做:
updateOverlay(x+1, y);
updateOverlay(x-1, y);
updateOverlay(x, y+1);
updateOverlay(x, y-1);
这就是问题所在。如果当我调用 updateOverlay(x+1, y) 时会发生什么情况,它的叠加层会发生变化,以至于与该图块相邻的图块需要更新叠加层,如果一个更新会发生什么情况?那些相邻的瓷砖会导致同样的事情吗?然后是一大串更新。
我尝试了类似于以下的递归实现:
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] 需要更新,会发生什么?
是否有任何其他解决方案来处理更新图块覆盖?
任何帮助将不胜感激
【问题讨论】:
-
func 中的第一行也是递归的..
-
@user2746020 哎呀,我修好了
标签: java algorithm graphics libgdx tile