繁体   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