【发布时间】:2016-06-23 08:07:08
【问题描述】:
很抱歉这个措辞不好的问题,但这是我能想到的最好的问题。
所以,我在使用 libGDX(Java,桌面)和使用 Tiled 创建的平铺地图的游戏项目中遇到了一个小问题。
使用 Tiled 中新的动画平铺编辑器功能,我创建了我的动画,一个爆炸的炸弹。效果很好。
我使用以下代码(简化为仅保留重要部分)以编程方式将炸弹放置在地图上(在其第二层):
tiledMap = new TmxMapLoader().load("maps/mymap.tmx");
TiledMapTileSet tileset = tiledMap.getTileSets().getTileSet("bombe");
animatedBomb= tileset.getTile(882);
showBomb(my_random_x, my_random_y);
public void showBomb(int x, int y){
TiledMapTileLayer layer = (TiledMapTileLayer) tiledMap.getLayers().get(1);
TiledMapTileLayer.Cell cellToChange = layer.getCell(x, y);
if(cellToChange != null){
cellToChange.setTile(animatedBomb);
}
}
正如我所说,它工作得很好,但有一个小问题(对我来说是个大问题)我似乎无法解决:随着每个炸弹的添加,它们似乎共享内部动画计时器。 例如:
动画持续 17 帧 * 100 毫秒。如果我在游戏时间 0.0 秒添加一个炸弹,然后在 1.0 秒添加另一个,新炸弹将生成并直接更改到第 10 帧,这也是第一个炸弹的当前帧。
我希望每个图块都有单独的动画计时器。有可能吗?
我尝试使用 Tiled 的动画切片实现或手动动画(使用 AnimatedTiledMapTile 及其静态切片数组以编程方式创建)来实现,但行为是相同的。
更新:
即使我尝试逐帧复制对象,手动间隔为 0.2f,炸弹仍然同时爆炸。
TiledMapTileSet tileset = tiledMap.getTileSets().getTileSet("bombe");
AnimatedTiledMapTile originalBomb = (AnimatedTiledMapTile)tileset.getTile(882);
//copying the StaticTiledMapTile array of originalBomb
Array<StaticTiledMapTile> bombTiles = new Array<StaticTiledMapTile>();
StaticTiledMapTile[] copyArray = bombeAnimee.getFrameTiles().clone();
for(StaticTiledMapTile tile : copyArray){
bombTiles.add(tile);
}
AnimatedTiledMapTile anotherBomb = new AnimatedTiledMapTile(0.2f,bombTiles);
TiledMapTileLayer.Cell cellToChange = layer.getCell(x, y);
cellToChange.setTile(anotherBomb);
【问题讨论】:
标签: java animation timer libgdx tiled