代码如下:
- /**
- * 被打的人
- *
- * @author zhaozhantao@21cn.com
- *
- */
- public class ManBall extends Spirit {
-
- /**
- * 能被碰撞的东西
- */
- private List<Collideable> collideables = new ArrayList<Collideable>();
-
- @Override
- public void move(float x, float y) {
- if (collideListener != null) {
- synchronized (collideables) {
-
- if (collideables != null) {
- for (Collideable collideable : collideables) {
- if (collideable.checkCollide(this, (int) x, (int) y)) {
- CollideEvent collideEvent = new CollideEvent();
- collideEvent.setCollideable(collideable);
- collideListener.onCollide(collideEvent);
- }
- }
- }
- }
- }
- super.move(x, y);
- }
-
- /**
- * 添加一个要被检测的可碰撞的东西
- *
- * @param collideable
- */
- public void addCollideable(Collideable collideable) {
- synchronized (collideables) {
- collideables.add(collideable);
- }
- }
- /**
- * 删除一个要被检测的可碰撞的东西
- *
- * @param collideable
- */
- public void removeCollideable(Collideable collideable) {
- synchronized (collideables) {
- collideables.remove(collideable);
- }
- }
-
- }
复制代码 三个主要的方法,分别是move,add,remove
move里面遍历了这个集合
add和remove分别是对这个集合的增加删除操作
我都加了synchronized (collideables)
不知道是不是这样写,反正是执行remove的时候报了这样的一个错
java.util.ConcurrentModificationException
|