显示项目符号时出现concurrentmodificationexception

nkoocmlb  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(255)

我翻拍旧的复古游戏“太空射手”我想显示子弹,并检查是否有击中与敌人
我添加了所有这些,但仍然得到了这个错误。我肯定是子弹的问题
此处代码:

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

zzlelutf

zzlelutf1#

在执行remove()之后继续遍历列表。
您同时读取和写入列表,这破坏了迭代器的契约(内部用于 for 循环)。
如果要从列表中删除元素,请使用迭代器(示例代码)。

trash = new ArrayList<>();

    for (final Iterator<Bullet> iterator = trash.iterator(); iterator.hasNext();) {
      final Bullet student = iterator.next();
      iterator.remove();
    }

相关问题