单独的ArrayLists之间的冲突

时间:2015-01-02 21:15:48

标签: java arraylist collision-detection

我正在制作一个简单的游戏,目标是飞过屏幕然后你拍摄它们。 我使用一个ArrayList用于目标,一个用于投射

问题:当有1-2个射弹可见时,射弹只能探测到碰撞。似乎只检查了一个边界框(以及它要触发的最后一个子弹)。对敌人来说同样如此。发生的事情是子弹飞过目标。

编辑:抱歉,我发布了这个匆忙,看起来很糟糕。我拿出了不相关的代码。

public void run() {

    while (true) {

        ArrayList balloons = getBalloons();
        for (int i = 0; i < balloons.size(); i++) {
            Enemy q = (Enemy) balloons.get(i);
            if (q.isVisible() == true) {
                q.update();
            } else {
                balloons.remove(i);

            }
        }

        ArrayList projectiles = getProjectiles();
        for (int i = 0; i < projectiles.size(); i++) {
            Projectiles p = (Projectiles) projectiles.get(i);
            if (p.isVisible() == true) {
                p.update();
            } else {
                projectiles.remove(i);
            }

        }

        if (balloons.size() < numOfEnemies) {
            Spawn();
        }

        repaint();

    }
}

@Override
public void update(Graphics g) {

    ArrayList projectiles = getProjectiles();
    for (int i = 0; i < projectiles.size(); i++) {
        Projectiles p = (Projectiles) projectiles.get(i);
        g.setColor(Color.BLACK);
        g.fillRect(p.getX(), p.getY(), 10, 5);
    }

    ArrayList balloons = getBalloons();
    for (int j = 0; j < balloons.size(); j++) {
        Enemy q = (Enemy) balloons.get(j);
        g.drawImage(balloonImage, q.getX(), q.getY(), 40, 60, this);
    }

}

这是射弹的类(对于那些几乎完全相同的敌人,只发布这个)

public Enemy(int centerX, int centerY) {
    x = centerX;
    y = centerY;
    speedX = 1;
    visible = true;
    r = new Rectangle(0, 0, 0, 0);
}

public void update() {
    x += speedX;
    //y += 1; //move down
    rect.setRect(getX(), getY(), 40, 60);
    r.setRect(getX(), getY(), 40, 60);

    if (x > 400) {
        visible = false;
    }else{
        checkCollision();
    }
}

private void checkCollision() {
    if (r.intersects(Projectiles.rect)) {
        visible = false;
        startingClass.score += 1;
    }
}

0 个答案:

没有答案