2017-04-06 34 views
0

ArrayListの最初の要素を読みたいと思います。問題は、私は 'エンティティがArrayListに変換することはできません'と言うエラーが返されるメソッドを構築するときです。私は値を返すためにforeachを使用しているので、return関数はパブリックArrayListである必要があります。誰かが私が何を間違えているのか、これを改善するために何ができるのか教えていただけますか?エンティティをArrayListに変換できません<Entity>

エンティティマネージャ(パブリックArrayList)が機能しません。

public class EntityManager { 

private Handler handler; 
private Player player; 
private ArrayList<Entity> entities; 
private int counter = 0; 


private Comparator<Entity> renderOrder = new Comparator<Entity>(){ 
     @Override 
     public int compare(Entity a, Entity b) { 
       if(a.getY() + a.getHeight() < b.getY() + b.getHeight()) 
         return -1; 
       return 1; 
     } 
}; 

public EntityManager(Handler handler, Player player){ 
    this.handler = handler; 
    this.player = player; 
    entities = new ArrayList<Entity>(); 
    addEntity(player); 
} 

public void tick(){ 
    Iterator<Entity> it = entities.iterator(); 

    while(it.hasNext()){ 
     Entity e = it.next(); 
     e.tick(); 
     if(!e.isActief()){ 
      it.remove(); 
      counter(); 
      if(counter > entities.size() + 1){ 
       player.eindspel = true; 
      } 
     } 
    } 
    entities.sort(renderOrder); 
} 

public void render(Graphics g){ 
    for(Entity e : entities){ 
     e.render(g); 
    } 
    player.postRender(g); 
} 
public ArrayList<Entity> getEntities() { 
    return entities.get(0); 
} 
public void counter(){ 
    counter++; 
} 
public void addEntity(Entity e){ 
    entities.add(e); 
} 

public void setHandler(Handler handler) { 
    this.handler = handler; 
} 

public void setPlayer(Player player) { 
    this.player = player; 
} 

public void setEntities(ArrayList<Entity> entities) { 
    this.entities = entities; 
} 

public Handler getHandler() { 
    return handler; 
} 
public Player getPlayer() { 
    return player; 
} 
} 

私はGETENTITIES

から値を読み出すために使用していていますforeach
 for(Entity e : handler.getWereld().getEntityManager().getEntities()){ 
     if(e.equals(this)){ 
      continue; 
     } 
     if(e.getCollisionBounds(0, 0).intersects(ar)){ 
      if(opslag.delete()){ 
       e.delete(2);      
      } 
     } 
    } 

E iはi「はリターンのエンティティで取得するエンティティを削除したいと交差するとき、私が望む結果があります。 get(0) '、私のエンティティの最初のエンティティarraylistです。そのメソッドだけがうまくいかず、私が 'リターンエンティティ'を使うと、最初のエンティティではなく、すべてのエンティティが削除されます。

+0

私はあなたの 'getEntities()'メソッドのロジックを取得しません。そのメソッド名と戻り値の型は、あなたがいくつかのエンティティを返し、それでも 'return entities.get(0);'を呼び出していることを明確にしていますか?これはどうやって意味があるのでしょうか? – Tom

+0

私は、すべてのエンティティがarraylistの最初のエンティティを取得するのではなく、getEntitiesメソッドを変更したいと考えています。 –

答えて

0

ArrayListの代わりにListを使用するように外部インターフェイスを一般化する場合は、Collections.singletonListを使用して最初のエンティティを含むリストを作成するだけでよいでしょう(hereを参照してください)。

しかし、1つのエンティティだけを返すgetEntitiesというメソッドを使用するのは、私にとっては直感的ではないようです。すべてのエンティティを取得したいときや、ただ1つだけを取得したいときは、まだ実際には得られません。たぶん、あなたは、あなたが、私はそれはそれはあなたの問題だったと思うエンティティ

e.delete(2); 

上(int)メソッドを削除し、この方法は、コレクションにも適用することが呼び出しているあなたの質問もう少しあなたのユースケースを説明するための

0

を編集することができますから来た。

関連する問題