AndEngine动态改变TMX Tiled Map
AndEngine change TMX Tiled Map Dynamically
我已经阅读了这个问题的所有可能重复项,none 给了我一个完整的解决方案(解决方案分为答案)所以我决定试着把事情清理干净。顺便说一句,Whosebug 告诉我:
Not the answer you're looking for? Browse other questions tagged android andengine tmx or ask your own question.
和
It's OK to Ask and Answer Your Own Questions
So [...] if you'd like to document it in public so others (including yourself) can find it later
现在很清楚了,我想动态更改 TMX 地图。例如地图有一个箱子对象。玩家走在上面并获得金币。然后我想从地图上移除箱子,这样玩家就不能多次收集箱子。我该怎么做?
可以将宝箱从地图中移除,使其无法再被收集,但不能通过编辑 TMX 地图来实现。为此,每当玩家走过箱子时(通过向箱子添加 属性 来检查,例如 chest=true 然后检查它),除了奖励玩家之外,您还必须做一些事情,那就是使用 Shared 进行保存使用字符串集(例如使用键 "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);
}
我已经阅读了这个问题的所有可能重复项,none 给了我一个完整的解决方案(解决方案分为答案)所以我决定试着把事情清理干净。顺便说一句,Whosebug 告诉我:
Not the answer you're looking for? Browse other questions tagged android andengine tmx or ask your own question.
和
It's OK to Ask and Answer Your Own Questions
So [...] if you'd like to document it in public so others (including yourself) can find it later
现在很清楚了,我想动态更改 TMX 地图。例如地图有一个箱子对象。玩家走在上面并获得金币。然后我想从地图上移除箱子,这样玩家就不能多次收集箱子。我该怎么做?
可以将宝箱从地图中移除,使其无法再被收集,但不能通过编辑 TMX 地图来实现。为此,每当玩家走过箱子时(通过向箱子添加 属性 来检查,例如 chest=true 然后检查它),除了奖励玩家之外,您还必须做一些事情,那就是使用 Shared 进行保存使用字符串集(例如使用键 "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);
}