我一直在使用this technique来改变我们游戏中的牌,但是当很多牌一次改变时,我注意到了很大的性能损失。我正在使用该技术在TMX地图上设置瓷砖动画。我想知道是否有其他人注意到使用该方法更改tmx磁贴的任何性能问题?有没有更有效的方法来改变TMX Tiles?
为了避免性能损失,我能想到的另一个选择是将动画精灵附加到TMX层,但这似乎不是一个理想的解决方案。
任何建议都将受到赞赏。
以下是我所指的方法:
mTestTile.setGlobalTileID(mTMXTiledMap, mGloabalIndex);
//After changing the global ID do this
final int TileHeight = mTMXTiledMap.getTileHeight();
final int TileWidth = mTMXTiledMap.getTileWidth();
//See TMXLayer Class line 308 (getSpriteBatchIndex)
lTMXLayer.setIndex(mTestTile.getTileRow() * mTMXTiledMap.getTileColumns() + mTestTile.getTileColumn());
lTMXLayer.drawWithoutChecks(mTestTile.getTextureRegion(), mTestTile.getTileX(), mTestTile.getTileY(), lTileWidth, lTileHeight, Color.WHITE_ABGR_PACKED_FLOAT);
mTMXTiledMap.mTestTMXLayer.submit();[/syntax]
注意:我正在使用GLES2 Anchor_Center Branch
答案 0 :(得分:2)
我不确定你是否可以使用它,但我需要类似的东西。我的TMX地图中有几个对象,我想要有两个帧(开/关)。我没有使用地图图层,而是使用了对象图层。我已将此代码添加到TMXTileset
类:
public ITiledTextureRegion getTiledTextureRegionFromGlobalTileID(final int pGlobalTileID, final int pTiles) {
ITextureRegion[] regions = new ITextureRegion[pTiles];
for (int i = 0; i < pTiles; i++) {
regions[i] = getTextureRegionFromGlobalTileID(pGlobalTileID + i);
}
return new TiledTextureRegion(this.mTexture, regions);
}
我将所有开/关对象放到特殊对象层(使用Tiled编辑器)。当然,必须组织tileset,以便开启和关闭帧顺序。
然后,当我创建地图时,我遍历这些对象并创建平铺的精灵。我将它保存到一个特殊的列表中供以后检索。然后当然从一个切换到另一个就像使用setCurrentTileIndex()