【问题标题】:How do I destroy a bullet after a collision or after a certain amount of time LibGDX Box2d如何在碰撞后或经过一定时间后销毁子弹 LibGDX Box2d
【发布时间】:2020-06-12 21:13:40
【问题描述】:

我有一个可以发射子弹的精灵。为了射击子弹,我有一个 if 语句来检查他的射击动画是否正在播放,如果是,那么它应该创建一个像这样创建的子弹:

BodyDef bdef = new BodyDef();
  bdef.position.set(isaac.ISAACX, isaac.ISAACY);
  bdef.type = BodyDef.BodyType.DynamicBody;
  b2Body = world.createBody(bdef);
  b2Body.setBullet(true);

  fdef = new FixtureDef();
  shape = new CircleShape();
  shape.setRadius(3 / icsGame.PPM);

  fdef.shape = shape;
  b2Body.createFixture(fdef).setUserData("bullet");

我想出了如何定位子弹的创建位置以及如何将它们分开我只是不知道如何摧毁它们。

if(currentStateShooting == State.NORTH && shootTimer >= SHOOT_WAIT_TIME){
  shootTimer = 0;
  defineBullet();
  b2Body.applyLinearImpulse(0, 3, b2Body.getWorldCenter().x, b2Body.getWorldCenter().y, true);
  if(wall.destroyed){
    System.out.println("hi");
    b2Body.destroyFixture(b2Body.createFixture(fdef));
    world.destroyBody(b2Body);
    wall.destroyed = false;
  }
}

目前 if 语句从 wall 类中获取一个布尔值:

public class wall extends interactiveTileObject {
  public static boolean destroyed = false;
  public wall(playScreen screen, Rectangle bounds) {
    super(screen, bounds);
    fixture.setUserData(this);
  }

  @Override
  public void onBodyHit() {
    destroyed = true;
  }
}

问题是它不会破坏身体。知道为什么会这样吗?有没有更好的方法来做到这一点?

【问题讨论】:

    标签: java libgdx box2d


    【解决方案1】:

    也许你应该尝试使用 Actors 来显示你的子弹。

    之后,您将能够对您的演员使用动作。 Action 让您轻松定义许多行为并尊重 libgdx 生命周期

    在您的情况下是 RemoveAction。 A link to the javadoc of Actions

    【讨论】:

      猜你喜欢
      • 2013-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多