AndEngine动态更改TMX Tiled Map

时间:2015-09-05 22:11:36

标签: java android andengine tmx

我已经阅读了这个问题的所有可能的重复项,没有一个给我一个完整的解决方案(解决方案分为答案)所以我决定尝试清除这些问题。 BTW StackOverflow告诉我:

  

不是您要找的答案?浏览标记 android andengine tmx 提出自己的问题的其他问题。

  

It's OK to Ask and Answer Your Own Questions
  所以,如果你想在公共场合记录它,那么其他人(包括你自己)可以在以后找到它

现在很清楚,我想动态更改TMX地图。例如,地图有一个胸部对象。玩家走在上面并获得金币。然后我想从地图中移除胸部,这样玩家就不能多次收集胸部。我该怎么做?

1 个答案:

答案 0 :(得分:1)

从地图中移除胸部以便无法再收集胸部,但不能通过编辑TMX贴图来进行。为了做到这一点,每当玩家走过一个胸部(通过在胸部添加一个属性,如胸部=真,然后检查它),除了奖励玩家,你必须做一些事情,这是使用共享首选项保存,这是胸部已使用字符串集(例如,使用键“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);

现在您可以保存/加载旧箱子。这是每当玩家走过具有(胸部=真)属性的瓷砖时:

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