java - 如何在碰撞后或经过一定时间后销毁子弹 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;
}
}
问题是它不会破坏身体。知道为什么会这样吗?有一个更好的方法吗?
解决方案
也许您应该尝试使用 Actors 来显示您的子弹。
之后,您将能够对您的演员使用动作。Action 让您轻松定义许多行为并尊重 libgdx 生命周期
在您的情况下是 RemoveAction。 Actions 的 javadoc 的链接
推荐阅读
- linux - 使用大页面映射编写映射文件
- php - web.php 中的路由没有读取使用 laravel 发送的 url
- php - Woocommerce 管理员编辑订单页面常规部分中的自定义可编辑字段
- python - Django的多线程
- javascript - 制作显示模块模式的方法
- r - 给定坐标 x 和 y 的 R 语法形成方差-协方差矩阵
- android - Android 应用 XML 数据结构
- machine-learning - 使用 MxNet 训练网络时是否可以重用 GPU 的内存?
- mysql - 使用不同的值集更新多个(不是全部)行 - MySQL
- c# - 如何使用数千条记录更快地选择指纹?