2015-09-05 89 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); 
}