簡體   English   中英

AndEngine動態更改TMX平鋪地圖

[英]AndEngine change TMX Tiled Map Dynamically

我已經閱讀了該問題的所有可能重復內容,但沒有一個給我完整的解決方案(解決方案分為答案),因此我決定嘗試解決問題。 BTW StackOverflow告訴我:

不是您要找的答案? 瀏覽標記為android andengine tmx的其他問題,或詢問您自己的問題。

可以提問並回答自己的問題
因此,如果您想公開記錄它,以便其他人(包括您自己)以后可以找到它。

現在已經很清楚了,我想動態更改TMX映射。 例如,地圖有一個胸部對象。 玩家在上面行走並獲得金牌。 然后,我想從地圖上刪除箱子,以使玩家不能一次以上收集箱子。 我該怎么做呢?

可以從地圖上移除箱子,使其無法再被收集,但是不能通過編輯TMX地圖來進行。 要做到這一點,每當玩家經過一個箱子時(通過在箱子上添加一個屬性,例如Chest = true然后檢查它),除了獎勵玩家之外,您還必須做一些事情,並且使用共享的偏好來保存該箱子擁有的東西通過字符串集(例如,使用鍵“ chests”)使用並包含以“:”分隔的坐標。 保存坐標:

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);

現在您可以保存/加載用過的箱子。 每當玩家走過具有(chest = true)屬性的圖塊時:

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM