gpt4 book ai didi

java - AndEngine动态改变TMX Tiled Map

转载 作者:行者123 更新时间:2023-11-30 01:54:49 26 4
gpt4 key购买 nike

我已经阅读了这个问题的所有可能重复项,但没有一个给我提供完整的解决方案(解决方案分为答案)所以我决定尝试把事情弄清楚。顺便说一句,StackOverflow 告诉我:

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 map 。例如 map 有一个箱子对象。玩家走在上面并获得金币。然后我想从 map 上移除箱子,这样玩家就不能多次收集箱子。我该怎么做?

最佳答案

可以将宝箱从 map 中移除,使其无法再被收集,但不能通过编辑 TMX map 来实现。为了实现这一点,每当玩家走过箱子时(通过向箱子添加一个属性来检查 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) 属性的图 block 时:

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(),需要一个小技巧:在箱子上画一个有地面纹理的 Sprite :

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

关于java - AndEngine动态改变TMX Tiled Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32418181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com