【发布时间】:2017-04-06 10:45:15
【问题描述】:
我想读出 ArrayList 的第一个元素。问题是当我构造一个返回方法时,我收到一条错误消息“实体无法转换为 ArrayList”。返回函数需要是一个公共 ArrayList,因为我使用 foreach 来返回值。谁能告诉我我做错了什么以及我可以做些什么来改进它?
实体管理器(公共 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 相交时,我想删除我通过“return entity.get(0)”获得的实体,所以我的实体数组列表的第一个实体。只有那个方法不起作用,当我使用“返回实体”时,我的所有实体都会被删除,而不仅仅是第一个。
【问题讨论】:
-
我不明白你的
getEntities()方法的逻辑。该方法名称和返回类型清楚地表明您返回了几个实体,但您仍然在那里调用return entities.get(0);?这怎么可能? -
我想将 getEntities 方法更改为,而不是让所有实体只获取我的数组列表中的第一个实体。