为什么两个矩形之间的碰撞不起作用?

时间:2015-01-26 10:55:28

标签: java android libgdx collision-detection game-physics

我想了解一件事,下面我看到两个矩形之间的碰撞有效。

创建方法:

//nave
    spaceShip = new Image(new TextureRegion(new Texture(Gdx.files.internal("rocket.png")),98,154));
    spaceShip.setOrigin(spaceShip.getWidth()/2, spaceShip.getHeight()/2);
    spaceShip.setBounds(spaceShip.getX(),spaceShip.getY(),spaceShip.getWidth(),spaceShip.getHeight());
    spaceShip.setZIndex(3);

    //meteora
    meteora = new Image(new TextureRegion(new Texture(Gdx.files.internal("planet.png")),128,128));
    meteora.setOrigin(meteora.getWidth()/2,meteora.getHeight()/2);
    meteora.setPosition(Gdx.graphics.getWidth()/2, Gdx.graphics.getHeight()/2);
    meteora.setBounds(meteora.getX(),meteora.getY(),meteora.getWidth(),meteora.getHeight());
    meteora.setZIndex(3);

渲染方法:

rect1 = new Rectangle(spaceShip.getX(),spaceShip.getY(),spaceShip.getWidth(),spaceShip.getHeight());
    rect2 = new Rectangle(meteora.getX(),meteora.getY(),meteora.getWidth(),meteora.getHeight());

    if(Intersector.overlaps(rect1,rect2)){
        System.out.println("collision");
    }

现在,我的问题是: 因为我可以看到与动态物体的碰撞。 让我解释一下,现在会有随机时间创建的不同。 那么如何判断是否与其中一个对象发生碰撞并了解它是什么。 Rectangle没有方法.setName,我想用它来弄清楚我的船碰到了哪个物体。

有人可以推荐一个解决方案吗?

谢谢

EDIT 添加图像对象

    meteora = new Image(new TextureRegion(new Texture(Gdx.files.internal("planet.png")), 128, 128));
    meteora.setOrigin(meteora.getWidth() / 2, meteora.getHeight() / 2);
    meteora.setPosition(Gdx.graphics.getWidth() / 2, 100);
    meteora.setZIndex(3);

    Rectangle rect = new Rectangle(meteora.getX(),meteora.getY(),meteora.getWidth(),meteora.getHeight());
    rectangles.add(rect);

1 个答案:

答案 0 :(得分:0)

我不完全确定问题是什么,但回答我认为你所得到的:

通常,您希望将所有新创建的矩形添加到矩形集合中,然后您可以遍历此集合以检查碰撞:

List<Rectangle> rectangles = new ArrayList<Rectangle>();  // a field in your class

// inside the method to create random rectangles
Rectangle tmp = new Rectangle(1,2,3,4);     
rectangles.add(tmp);  

// inside the method to check for collisions
for(Rectangle rect : rectangles) {
  if(Intersector.overlaps(rect, shipRect) {
     System.out.println("collision");
  }
}

请注意,您的船舶范围的rect1也应保存为字段(在此示例中为shipRect),以便您可以随时返回