首页 > 解决方案 > 如何在碰撞后或经过一定时间后销毁子弹 LibGDX Box2d

问题描述

我有一个应该发射子弹的精灵。为了射击子弹,我有一个 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;
  }
}

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

标签: javalibgdxbox2d

解决方案


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

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

在您的情况下是 RemoveAction。 Actions 的 javadoc 的链接


推荐阅读