我在编写游戏时对速度和效率有疑问。我想知道在屏幕上同时拥有大量敌人的最佳方法是什么。我是否使用单个精灵,移动它并为每个敌人绘制它?或者我为每个敌人都有一个精灵的实例(其中一次可以在屏幕上有50个)。我想知道有很多Sprite实例(反过来,纹理)的速度影响。以上哪项对效率和整体良好实践最有利?
答案 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");
}
正如你所看到的,它为每个怪物提供了一个具有相同纹理的精灵的新实例。所有精灵都引用相同的纹理来节省内存。希望这会有所帮助。