大量的矩形/精灵导致滞后。需要更好的方法来使用它们

时间:2013-11-17 02:54:24

标签: java android andengine

我想在我的游戏中实现一个小地图类型的东西。我创建了这样的小地图:

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。

2 个答案:

答案 0 :(得分:0)

取决于tilearray的数量,它可能是GC的过度杀伤力。尽量不要在每次迭代中创建精灵,但只使用例如渲染它们。 SpriteBatch或通过GenericPool实现池化。

通过使用自定义顶点缓冲区对象或共享顶点缓冲区对象,有一些方法可以进一步优化它。还记得在地图集中保留精灵以避免多个纹理切换到OpenGL。

答案 1 :(得分:0)

如果摄像机视图中有许多精灵,可以使用sprite.setCulling()方法。