我正在制作一个简单的游戏,目标是飞过屏幕然后你拍摄它们。
我使用一个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;
}
}