【问题标题】:LibGDX collision detection on moving and rotating object (rectangle enemy)LibGDX 对移动和旋转物体(矩形敌人)的碰撞检测
【发布时间】:2014-06-17 02:25:43
【问题描述】:

我正在尝试让碰撞检测正常工作,但是当我这样做时,碰撞区域一直在移动。不管我怎么尝试。 有 2 个物体,物体在移动,我无法让碰撞区域跟随敌人/物体。

我正在使用下面的方法来查看碰撞是否会起作用并且它没有正确跟随敌人。

enemy class extends sprite {

以上是我如何使用 sprite 扩展的示例。

对象/敌人是来自 libgdx 的精灵,该类由精灵扩展。

shapeRenderer.begin(ShapeType.Filled);
shapeRenderer.setColor(Color.RED);

shapeRenderer.rect(rect1.getX() + (rect1.getWidth() / 2), rect1.getY()  + (rect1.getHeight() / 2) - 2, rect1.getOriginX() - 1, rect1.getOriginY() - 4, 1.0f, 1.0f, rect1.getRotation());

shapeRenderer.rect(rect2.getX() - 10, rect2.getY() - 10, rect2.getWidth() - 10, rect2.getHeight() - 10, rect2.getOriginX(), rect2.getOriginY(), rect2.getRotation());

shapeRenderer.end();

这是在敌人类碰撞检查中

rect.set(getX() + (getWidth() / 2), getY()  + (getHeight() / 2) - 2, getOriginX() - 1, getOriginY() - 4);

这是看敌人是否在碰撞

public boolean collides(Ball ball) {
  if (getX() < ball.getX()) {
     return (Intersector.overlaps(ball.getRect1(), rect));
  }
  return false;

}

任何帮助都会非常好。 谢谢

【问题讨论】:

    标签: java android libgdx collision


    【解决方案1】:

    从你的代码中看你的问题不是很清楚,但是为了能够检查两个矩形是否发生碰撞,你可以使用 Intersector 类。

      if(Intersector.overlaps(rectangle1, rectangle2) {
          // Do here whatever you want.
    }
    

    Intersector 也可以处理圆形和多边形。我通常将它放入我从 Actor 类覆盖的 act 方法中。如果你没有使用 Stage,我想你可以在 render 方法中检查。

    【讨论】:

    • 嗨@johnny-b。如果两个矩形重叠时是正确的,Intersector 将返回 true。如果你没有得到真正的检查你的矩形是否正确。您可以在您的情况下使用 ShapeRenderer ball.getRect1() 和 rect 进行渲染,并检查矩形是否正确。我可以看到您正在偏移矩形,但这取决于您要在游戏逻辑中实现什么。
    • 子弹就像子弹的形状,前面是圆形的,所以我试图在里面做一个矩形作为碰撞检测区域,而不是整个精灵,因为它会覆盖整个长方形。这是因为该区域覆盖得足够多,所以子弹被覆盖了,我正在尝试实现一个 touch() 方法来杀死它,所以如果你触摸矩形区域,它就会被取出。如果这更清楚????
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 2023-03-23
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    相关资源
    最近更新 更多