java - LibGDX 中纹理的多个实例?

标签 java performance libgdx

我对游戏编码时的速度和效率有疑问。我想知道屏幕上同时出现大量敌人的最佳方法是什么。我是否使用单个 Sprite ,移动它并为每个敌人绘制它?或者我是否为每个敌人都有一个 Sprite 实例(屏幕上可能同时有 50 个敌人)。我想知道拥有大量 Sprite 实例(以及纹理)对速度的影响。上述哪一项最有利于效率和整体良好实践?

最佳答案

我建议为每个怪物都有一个 Sprite 实例。所有 Sprite 都对单个纹理具有相同的引用,因此更容易拥有大量 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");
}

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

关于java - LibGDX 中纹理的多个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17062976/

相关文章:

java - 亚马逊 S3 list "directories"

java - 在 Java 中获取数据类型大小(sizeof)的最佳实践

performance - 编年史队列硬断电恢复

java - 如何快速解决Libgdx中暂停和恢复功能

java - 存在 "@WebServlet"注释时出现 Servlet 映射错误

java - 如何在 Google map 上的标记上方添加文本?

performance - 连接两组节点的高效密码查询匹配子图

performance - 在 x86_64 汇编程序 (yasm) 中使用 POSIX 线程库需要更多的执行时间

java - libgdx box2d body - 如何通过给定的力或速度、距离和时间移动 body

ios - 在 iOS 设备上运行 Libgdx 应用程序进度为 40% 时失败