我想在我的游戏中实现一个小地图类型的东西。我创建了这样的小地图:
for (int i = 0; i < tilearray.size(); i++) {
float tileX = (200 * tilearray.get(i).getX()) / (getmWidth() * 64);
float tileY = (100 * tilearray.get(i).getY()) / (getmHeight() * 64);
Sprite tileSprite = new Sprite(tileX+590, tileY+380, (64 * 200) / (getmWidth() * 64) + (float) 1, (64 * 100)
/ (getmHeight() * 64) + (float) 1, resourcesManager.smallRect_region, vbom);
tileSprite.setIgnoreUpdate(true);
tileSprite.clearEntityModifiers();
tileSprite.clearUpdateHandlers();
gameHUD.attachChild(tileSprite);
}
它工作正常,但它使我的游戏波动和缓慢。这是可以理解的,因为我可以使用超过200/300的精灵,但我需要一种方法以相同的方式创建这个小地图,没有滞后。我试过了:
tileSprite.setIgnoreUpdate(true);
tileSprite.clearEntityModifiers();
tileSprite.clearUpdateHandlers();
我认为只是显示精灵的图像并删除它背后的几乎所有功能,但没有。那么我怎样才能创建相同的效果,但是以更高效的内存方式呢?
我在Android上,使用AndEngine。
答案 0 :(得分:0)
取决于tilearray的数量,它可能是GC的过度杀伤力。尽量不要在每次迭代中创建精灵,但只使用例如渲染它们。 SpriteBatch或通过GenericPool实现池化。
通过使用自定义顶点缓冲区对象或共享顶点缓冲区对象,有一些方法可以进一步优化它。还记得在地图集中保留精灵以避免多个纹理切换到OpenGL。
答案 1 :(得分:0)
如果摄像机视图中有许多精灵,可以使用sprite.setCulling()方法。