我期待爲Android製作一個簡單的太空入侵者類型射手,而且我很難讓子彈殺死敵人。我不太關心碰撞本身,但arrayList函數讓我感到困惑。我有一個子彈陣列和另一個壞人,他們各自的x和y位置。我試圖做到這一點,如果他們碰撞,相應的壞人消失。不幸的是,當我嘗試這樣做時,我收到了強制關閉,所以很難調試。下面是相關的代碼:試圖用ArrayList的子彈殺死一個ArrayList的badGuys
在Bullet.class:
public List<Placement> bulletsArray = new ArrayList<Placement>();
public List<Placement> temp = new ArrayList<Placement>();
public List<Integer> tempKill = new ArrayList<Integer>();
public List<Integer> kill(List<Placement> badguys){
for (int i = bulletsArray.size() ; i >= 0 ; i--){
Placement bulletsBang = bulletsArray.get(i);
for (int j = badguys.size(); j >=0 ; j--){
Placement badGuys = badguys.get(j);
if (bulletsBang.x == bulletsBang.y){
if (badGuys.x == bulletsBang.x && badGuys.y == bulletsBang.y){
tempKill.add(j);
}
}
}
// tempKill.add(0); //Just using this to get something to work.
// temp.add(bullets.get(i)); // should destroy the bullet when it hits.
}
return tempKill;
}
在World.class:
public void update(float deltaTime) {
if (gameOver)
return;
tickTime += deltaTime;
while (tickTime > tick) {
tickTime -= tick;
bullet.advance();
bullet.deleteExtra();
slowDown++;
if (slowDown == 2){
badGuy.advance();
slowDown = 0;
}
if (bullet.bulletsArray.size() > 0){
badGuy.kill(bullet.kill(badGuy.badguys));
}
}
}
在BadGuy.class;
public List<Placement> badguys= new ArrayList<Placement>();
public BadGuy(){
for (int i = 0 ; i < 8; i++){
if (i% 2 == 0){
badguys.add(new Placement(1 + i, 0));//creates 3 rows of bad guys.
badguys.add(new Placement(1 + i, 1));
badguys.add(new Placement(1 + i, 2));
}
}
}
public void kill(List<Integer> die){
for (int i = die.size() ; i >= 0 ; i --){
badguys.remove(die.get(i));
}
}
當我使用整數時,我可以得到壞道。但是我想返回arrayList來移除我接近力量的badguys。
int i = bulletsArray.size(); i> = 0;我 - //這應該會引發異常 –
它不會引發異常。它只是在for循環後面運行。如果我註釋掉 Placement bulletsBang = bulletsArray.get(i); 和 安置badGuys = badguys.get(j); 它不再強制關閉,所以我知道那不是問題。 編輯:我添加了一個編輯,以更充分地反映我的代碼。謝謝! – Funlamb
好像它將執行循環大小()+ 1次。 –