簡體   English   中英

如何檢測2個矩形之間的碰撞??? 圖書館

[英]How do i detect collision between 2 rectangles??? LIBGDX

所以我有一個問題,即Rectangle.overlaps由於某種原因不起作用或我不知道。 所有這些操作就是繪制一架飛機(MyActor)和一個子彈Actor,並在觸摸時使子彈向藍色敵方Actor移動,我希望它到達System.out.println(“ touched”); 如果子彈擊中敵人。

我將粘貼整個代碼。

public class MyGdxGame implements ApplicationListener{

private Texture texture;
private Texture bulletTexture;
private Texture enemyTexture;
private MyActor myActor;
private BulletActor bulletActor;
private EnemyActor enemyActor;
private Stage stage;
private BackGroundActor backGroundActor;

private Rectangle bulletRectangle;

private Rectangle enemyRectangle;
float X=500,Y =600;

float bulletX = X, bulletY = Y+43;
float enemyX =0, enemyY = 615;
boolean started;
int touched = 0;

public class EnemyActor extends Actor{

    @Override
    public void draw(Batch batch, float parentAlpha) {
        batch.draw(enemyTexture,enemyX,enemyY);
    }

    @Override
    public void act(float delta) {
        if(bulletRectangle.overlaps(enemyRectangle)){
            System.out.println("Overlaps");
        }
    }
}

public class BackGroundActor extends Actor{
    public BackGroundActor() {
        setBounds(0,0,1280,720);
        addListener(new InputListener(){
            @Override
            public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
                started = true;
                touched++;
                System.out.println(touched);
                return true;
            }
        });
    }
}

public class MyActor extends Actor{
    @Override
    public void draw(Batch batch, float parentAlpha) {
        batch.draw(texture,X,Y);
    }
}

public class BulletActor extends Actor{

    @Override
    public void draw(Batch batch, float parentAlpha) {
        batch.draw(bulletTexture,bulletX,bulletY);
    }

    @Override
    public void act(float delta) {
        if(started) {
            bulletX -= 3;
        }
    }
}
@Override
public void create() {

    texture = new Texture("C:\\Users\\User\\Documents\\LibGdxMainProjects\\SampleGame1\\android\\assets\\0001.png");
    bulletTexture = new Texture("C:\\Users\\User\\Documents\\LibGdxMainProjects\\SampleGame1\\android\\assets\\bullet.png");
    enemyTexture = new Texture("C:\\Users\\User\\Documents\\LibGdxMainProjects\\SampleGame1\\android\\assets\\fuel.png");

    bulletRectangle = new Rectangle(bulletX,bulletY,bulletTexture.getWidth(),bulletTexture.getHeight());
    enemyRectangle = new Rectangle(enemyX,enemyY,enemyTexture.getWidth(),enemyTexture.getHeight());

    stage = new Stage();
    myActor = new MyActor();
    enemyActor = new EnemyActor();
    bulletActor = new BulletActor();
    backGroundActor = new BackGroundActor();
    backGroundActor.setTouchable(Touchable.enabled);

    stage.addActor(bulletActor);
    stage.addActor(myActor);
    stage.addActor(backGroundActor);
    stage.addActor(enemyActor);

    Gdx.input.setInputProcessor(stage);

}

@Override
public void dispose() {
}

@Override
public void render() {
    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    stage.act(Gdx.graphics.getDeltaTime());
    stage.draw();

    if(enemyRectangle.overlaps(bulletRectangle)){
        System.out.println("HIT I SAY");
    }

}

@Override
public void resize ( int width, int height){

}

@Override
public void pause () {

}

@Override
public void resume () {

}

}

根據java文檔 ,有一個方法intersects(Rectangle r) 您可以使用它來確定兩個矩形是否相交。 在這里看看。

這里的問題是bulletRectangle不會更新為bullet的新位置, bulletX沒有直接鏈接到bulletRectangle

你可以做

if(started) {
    bulletX -= 3;
    bulletRectangle.setX(bulletX);
}

您可能還想用敵人的正確位置更新另一個矩形

if(enemyRectangle.overlaps(bulletRectangle)){
    System.out.println("HIT I SAY");
}

將此代碼添加到您的更新方法中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM