2015-09-05 110 views
1

我已閱讀所有可能的重複這個問題,沒有給我一個完整的解決方案(解決方案分爲答案),所以我決定嘗試和清除的東西了。 BTW StackOverflow告訴我:AndEngine更改TMX平鋪地圖動態

不是你要找的答案?瀏覽其他問題標記爲androidandenginetmx or 問你自己的問題。

It's OK to Ask and Answer Your Own Questions
所以[...]如果你想記錄它在公開,以便其他人(包括自己)以後能找到它

現在這很清楚,我想動態更改TMX地圖。例如,地圖有一個胸部對象。玩家在其上行走並接收黃金。然後我想從地圖上移除胸部,這樣玩家不能多次收集胸部。我該怎麼做呢?

回答

1

從地圖上移除胸部以便不再收集胸部是可能的,但不能編輯TMX地圖。爲了達到這個目的,每當玩家走過一個胸部時(通過向胸部添加屬性如胸部=真,然後檢查它),除了獎勵玩家,你必須做一些事情,這是使用共享首選項的胸部已經被使用了一個字符串集合(例如,用「鑰匙箱」)並且包含座標,用「:」分隔。要保存座標:

String saveMe = tileRow + ":" + tileColumn; 
removeChest(tileRow, tileColumn); 

要加載的座標:

String loaded = loadString(); 
String[] coords = loades.split(":"); 
tileRow = Integer.parseInt(coords[0]); 
tileColumn = Integer.parseInt(coords[1]); 
removeChest(tileRow, tileColumn); 

現在您可以保存/載入用箱子。這是每當玩家走到它具有(胸=真)屬性瓷磚:

boolean found = false; 
for (int i = 0; i < chestsUsedTileRowsArray.length; i++) { 
    if (chestFoundTileRow == chestsUsedTileRowsArray[i] && chestFoundTileColumn == chestsUsedTileColumnsArray[i]) { 
     found = true; 
     break; 
    } 
} 
if (!found) { 
    rewardPlayer(); 
    saveChestUsed(tileRow, tileColumn); 
} 

最後,還有removeChest()這需要一個小竅門:繪製這對胸部地面的紋理精靈:

void removeChest(int tileRow, int tileColumn) { 
    final TMXTile tileToReplace = tmxMap.getTMXLayers().get(0).getTMXTile(tileColumn, tileRow); 
    final int w = tileToReplace.getTileWidth(); 
    final int h = tileToReplace.getTileHeight(); 
    Sprite sprite = new Sprite(w * (tileColumn + 0.5), h * (tileRow + 0.5), textureRegionOfGround, this.getVertexBufferObjectManager()); 
    scene.addChild(sprite); 
}