如何处理两个arraylist对象之间的冲突?

时间:2014-01-25 16:39:41

标签: java arraylist collision

我的代码存在问题。我想在屏幕的每一侧制作一个带有球的游戏,球由用户控制,另一个由计算机控制。两个球都相互射击,如果子弹相互交叉,我需要做出一些事情。我设法做了一些事情,我有两个级别,一个用于玩家子弹,另一个用于敌人子弹,子弹是通过arraylists创建的。到目前为止所有作品都有效,但是如果我试着让它们相互碰撞,它根本不起作用。我已经尝试了很多东西,但没有一个有效,如果有人能帮助我,我真的很感激。

这是Player Projectile类:

import java.awt.Rectangle;

public class Projectiles {

private int x, y, speedX;
private boolean visible;
private int width = 10;
private int height = 10;

private Rectangle r;

public Projectiles(){

}

public Projectiles(int startX, int startY) {

    x = startX;
    y = startY;
    speedX = 1;
    visible = true;

    r = new Rectangle(0, 0, 0, 0);

}

public void update(){

    x += speedX;

    r.setBounds(x, y, width, height);

    if (x > 800){
        visible = false;
        r = null;
    }

    if (x < 800){
        checkCollision();
    }

}

private void checkCollision() {



}

public int getX() {
    return x;
}

public int getY() {
    return y;
}

public int getSpeedX() {
    return speedX;
}

public boolean isVisible() {
    return visible;
}

public void setX(int x) {
    this.x = x;
}

public void setY(int y) {
    this.y = y;
}

public void setSpeedX(int speedX) {
    this.speedX = speedX;
}

public void setVisible(boolean visible) {
    this.visible = visible;
}

public int getWidth() {
    return width;
}

public int getHeight() {
    return height;
}

public void setWidth(int width) {
    this.width = width;
}

public void setHeight(int height) {
    this.height = height;
}

public Rectangle getR() {
    return r;
}

public void setR(Rectangle r) {
    this.r = r;
}

}

这个是Enemy_Projectile类:

import java.awt.Rectangle;

public class Enemy_Projectiles {

private int x, y, speedX;
private boolean visible;
private int width = 30;
private int height = 20;

public static Rectangle r;

Projectiles p1;

public Enemy_Projectiles(int startX, int startY) {

    x = startX;
    y = startY;
    speedX = 1;
    visible = true;

    r = new Rectangle(0, 0, 0, 0);

}

public void update() {

    x -= speedX;

    r.setBounds(x, y, width, height);

    if (x < 0) {
        visible = false;
        r = null;
    }

    if (x > 0){
        checkCollision();
    }

}

private void checkCollision() {

    if(r.intersects(p1.getR())){
        visible = false;
        System.out.println("Coliziune!!");
    }

}

public int getX() {
    return x;
}

public int getY() {
    return y;
}

public int getSpeedX() {
    return speedX;
}

public boolean isVisible() {
    return visible;
}

public void setX(int x) {
    this.x = x;
}

public void setY(int y) {
    this.y = y;
}

public void setSpeedX(int speedX) {
    this.speedX = speedX;
}

public void setVisible(boolean visible) {
    this.visible = visible;
}

public int getWidth() {
    return width;
}

public int getHeight() {
    return height;
}

public void setWidth(int width) {
    this.width = width;
}

public void setHeight(int height) {
    this.height = height;
}

}

1 个答案:

答案 0 :(得分:0)

绘制框架后不要检查交叉点。假设您的计算机速度较慢且子弹相交,但它们在一帧中移出了交叉点。

您需要应用高中物理/几何。在渲染之前计算子弹的位置。然后,计算球的位置,并为每个球从现在的位置构建线段,到下一帧的位置。检查这些段是否相交。那么你将有一个检查交叉点的万无一失的方法。

此方法类似于在Unity等游戏引擎内处理对象之间的物理和交叉。