for(GObject sballgraphic : _sballs){
Coordinates sballcoords = sballgraphic.getCoords();
if(coords.getY() - coords._height > sballcoords.getY() + sballcoords._height && coords.getX() - coords._width > sballcoords.getX() + sballcoords._width){
_sballs.remove(sballgraphic);
}
}
因此代码将球坐标与所有sballs对象进行比较以检查是否存在碰撞,然后尝试移除sball。
这是什么问题? :)
答案 0 :(得分:5)
我猜测"崩溃"是ConcurrentModificationException
。
这种情况正在发生,因为当您使用迭代器(增强的for的内部工作方式)迭代它时,您试图从集合中删除。
您的选择是:
for( i=0; i<_sballs.size(); i++ )
)remove()
方法。removeAll()
。答案 1 :(得分:1)
你不能做这样的操作,因为你正在修改你正在迭代的同一个_sballs
。
ArrayList<GObject> _sballs;
ArrayList<GObject> _sballsForRemove;
for(GObject sballgraphic : _sballs){
Coordinates sballcoords = sballgraphic.getCoords();
if(coords.getY() - coords._height > sballcoords.getY() + sballcoords._height && coords.getX() - coords._width > sballcoords.getX() + sballcoords._width){
_sballsForRemove.add(sballgraphic);
}
}
_sballs.removeAll(_sballsForRemove);