在我的基於瓦片的自上而下的遊戲中,有點像Terraria,我需要在某些情況下有效地更新瓦片。我目前正在處理的情況是繪製瓦片之間的連接。有效處理所有遊戲磁貼更新?
通過連接我的意思是借鑑取決於其位置上的每個瓦片上重疊,因此,如果瓷磚是在一個角落裏,將有它連接到其他疊加一個角落覆蓋。有點像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;
}
的(overlayHasChanged)語句應該停止從發生的歷史無限遞歸循環,但它並沒有真正做任何事情,因爲我仍然有堆棧溢出錯誤。此問題的遞歸解決方案可能不是最好的,因爲它不會那麼穩定。
再次,我明白,我可以只更新所有相鄰的疊加,並用它做,但如果被要求將這些更新會導致什麼更多的更新?
[2] [6]
[1][x][3][5][8]
[4] [7]
爲了進一步說明我的觀點,看上面圖。
如果[X]是被更新的原始覆蓋,[1] [2] [3]和[4]將被更新。但是,如果[3]發生變化以致[5]需要並更新,會發生什麼?如果[5]發生了變化,[6] [7]和[8]需要更新,會發生什麼?
還有沒有其他的解決方案來處理更新圖塊疊加層?
任何幫助將不勝感激
你的func的第一行也是遞歸的.. – user2746020
@ user2746020哎呀是啊我修正了 – grimrader22