LibGDX中的多个纹理实例?

时间:2013-06-12 10:16:53

标签: java performance libgdx

我在编写游戏时对速度和效率有疑问。我想知道在屏幕上同时拥有大量敌人的最佳方法是什么。我是否使用单个精灵,移动它并为每个敌人绘制它?或者我为每个敌人都有一个精灵的实例(其中一次可以在屏幕上有50个)。我想知道有很多Sprite实例(反过来,纹理)的速度影响。以上哪项对效率和整体良好实践最有利?

1 个答案:

答案 0 :(得分:3)

我建议每个Monster都有一个Sprite实例。所有精灵都对单个纹理具有相同的引用,因此在不移动单个纹理的情​​况下更容易获得大量精灵。

以下是我的代码示例;

public ArrayList<Monster> createMonsters(int count, int maxlevel,
        int minlevel, MonsterTypes type) {
    ArrayList<Monster> monsters = new ArrayList<Monster>();
    // just one texture but multiple sprites
    // save memory :)
    Texture monster = getTextureByType(type);
    for (int i = 0; i < count; i++) {
        // create random level inside the area
        int level = (int) ((Math.random() * maxlevel) + minlevel);
        // create a default monster
        Monster mon = new Monster(level, new Sprite(monster), screen,
                new RandomAI());
        monsters.add(mon);
    }
    return monsters;
}

private Texture getTextureByType(MonsterTypes typ) {
    return this.screen.game.manager.get("monster/" + typ.getFileName()
            + ".png");
}

正如你所看到的,它为每个怪物提供了一个具有相同纹理的精灵的新实例。所有精灵都引用相同的纹理来节省内存。希望这会有所帮助。