【发布时间】:2014-10-23 05:47:08
【问题描述】:
有类似的问题,但他们问如何这是完成的。我知道怎么做,但我想知道为什么它在我要提到的情况下不起作用。
我一直在尝试为 2D 游戏调整引擎——有点像塞尔达传说。它有关卡、图块、实体(这听起来可能很熟悉),到目前为止,我用它实现的所有东西都运行良好。我创建了一个名为 Wanderer 的实体,可以预见,它会在关卡中四处游荡。第一次上课时,我很生气,不管我的位置如何,它总是吸引我的玩家角色。所以我认为一个简单的解决方法是根据每个实体的 y 位置不断地对 Level 类的“实体”ArrayList 进行排序。
public void tick(){
Collections.sort(entities, new DrawComp());
for(Entity e : entities){
e.tick();
}
for(Tile t : Tile.tiles){
if(t == null) break;
t.tick();
}
}
class DrawComp implements Comparator<Entity>{
public int compare(Entity e1, Entity e2){
if(e1.y < e2.y) return -1;
else if(e1.y == e2.y){
if(e1.x < e2.x) return -1;
}
return 0;
}
}
效果很好。我在屏幕上有几个流浪者,如果我走在一个后面,我的玩家会在它后面画,如果我走在一个前面,我的玩家会在它前面画。当我添加更多流浪者时,就会出现问题。整个事情都崩溃了。当我在它们上方显示实体的索引时,我看到 17 在 37 之上,36 在 22 之上。它适用于某些人,而不适用于其他人。
所以这就是我想知道的:为什么 ArrayList 排序功能不能始终正常工作?以更快的速度对更大的 ArrayList 进行排序是否会占用太多资源?
【问题讨论】:
标签: java performance sorting graphics arraylist