【发布时间】:2013-10-09 22:22:49
【问题描述】:
我在检查与在 run() 方法中更新的 2 个数组列表的冲突时遇到问题。这是我在 run() 方法中的代码:
ArrayList enemy = addenemy.getEnemy();
for (int i = 0; i < enemy.size(); i++) {
Enemy p = (Enemy) enemy.get(i);
if (p.isVisible() == true) {
p.update();
} else {
enemy.remove(i);
}}
ArrayList bullets = CharS.getBullets();
for (int i = 0; i < bullets.size(); i++) {
Bullets p = (Bullets) bullets.get(i);
if (p.isVisible() == true) {
p.update();
} else {
bullets.remove(i);
}}
这是我在子弹类中的碰撞代码。
private void checkCollision() {
ArrayList enemy = Game.getEnemy();
for (int i = 0; i < enemy.size(); i++) {
Enemy e = (Enemy) enemy.get(i);
if(r.intersects(e.r)){
visible = false;
System.out.println("SHOTED");
}}}
当敌人物体被移除(屏幕外)时我得到了错误。我该如何解决这个问题?谢谢
【问题讨论】:
-
“我出错了” - 好的,错误是什么?
-
我收到了这条消息:线程“Thread-3”中的异常 java.lang.NullPointerException
-
异常堆栈跟踪应显示导致 NPE 的代码行。请确定您发布的代码中的哪一行代码导致了异常。另外,
checkCollision方法中的r是什么? -
这一行
if(r.intersects(e.r)){导致了异常。 r 是子弹的矩形。它在敌人离开屏幕enemy.remove(i);之前正常运行。 @Ted-Hopp -
如果该行抛出 NPE,那么当该行执行时,
r或e是null。 (或者可能是e.r,如果 NPE 是从对intersects的调用中抛出的。)
标签: java arraylist collision-detection collision rectangles