我翻拍旧的复古游戏“太空射手”我想显示子弹,并检查是否有击中与敌人
我添加了所有这些,但仍然得到了这个错误。我肯定是子弹的问题
此处代码:
trash = new ArrayList<>();
for (Bullet bullet: bullets){
if(bullet.y<0){
trash.add(bullet);}
bullet.y = bullet.y+ (int)( -70 * screenRatioY);
for(Enemy enemy: enemies){
if(Rect.intersects(enemy.getRectangle(), bullet.getRectangle())){
score++;
enemyGetShot.start();
randomShot = random.nextInt(60-30)+30;
System.out.println("Nowy random shot: "+randomShot);
bullet.y=-500;
enemy.y=-500;
}
}
}
for(Bullet bullet : trash){
bullets.remove(bullet);}
在图纸部分:
for (Bullet bullet : bullets) {
canvas.drawBitmap(bullet.bullet, bullet.x, bullet.y, paint);
}
如果有人想要子弹课:
package com.example.space_shooter;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Rect;
import static com.example.space_shooter.GameView.screenRatioX;
import static com.example.space_shooter.GameView.screenRatioY;
public class Bullet {
int x,y,width,height;
Bitmap bullet;
Bullet(Resources res){
bullet= BitmapFactory.decodeResource(res, R.drawable.bullet4);
width= bullet.getWidth();
height= bullet.getHeight();
width = (int) (width*1.7);
height = (int) (height*1.7);
width= (int) (width*screenRatioX);
height= (int) (height* screenRatioY);
bullet= Bitmap.createScaledBitmap(bullet, width,height, true);
}
Rect getRectangle(){
return new Rect(x,y, x+width, y+height);
}
}
完整项目:https://github.com/polonez-byte-112/spaceshooter
1条答案
按热度按时间zzlelutf1#
在执行remove()之后继续遍历列表。
您同时读取和写入列表,这破坏了迭代器的契约(内部用于
for
循环)。如果要从列表中删除元素,请使用迭代器(示例代码)。