【问题标题】:Libgdx destroying multiple bodiesLibgdx 摧毁多个身体
【发布时间】:2014-09-15 08:51:30
【问题描述】:

所以基本上我在尝试销毁不在屏幕范围内的实体时遇到错误。当其他类型的主体被破坏时,我的一种类型的主体也开始表现得很奇怪(例如子弹开始向后移动)这里是代码示例:

主游戏循环类:

Array<Body> bodies = new Array<Body>(world.getBodyCount());
    world.getBodies(bodies);
    for (Body body : bodies) {
        check = 0;
        if (BodyUtils.bodyIsEnemy(body)){
            update(body);
            check = 1;
        }
        if (BodyUtils.bodyIsBullet(body) && check == 0){
            update1(body);
            check = 0;
        }
    }

private void update(Body body) {
    if (!BodyUtils.bodyInBounds(body)) {
        if (BodyUtils.bodyIsEnemy(body) && !player.isHit()) {
            createEnemy();
        }
        world.destroyBody(body);
    }
}

private void update1(Body body) {
    if (!BodyUtils.bulletInBounds(body))
        world.destroyBody(body);
}

其他类:

public static boolean bodyInBounds(Body body) {
        UserData userData = (UserData) body.getUserData();
        switch (userData.getUserDataType()) {
        case ENEMY:
            return body.getPosition().x + userData.getWidth() / 2 > 0;
        }
        return true;
    }

    public static boolean bulletInBounds(Body body) {
        UserData userData = (UserData) body.getUserData();
        switch (userData.getUserDataType()) {
        case BULLET:
            return body.getPosition().x + userData.getWidth() < 20;
        }
        return true;
    }

【问题讨论】:

  • 您是否在world.step 运行时执行此操作?这意味着例如在回调中?
  • 是的,世界步骤的运行方法与我正在执行循环的方法相同
  • 是同一个方法,还是并行运行?
  • 您可以尝试延迟删除:Gdx.app.postRunnable(new Runnable() {@Override public void run () {world.destroyBody(toRemove);}});
  • 同样的方法,“postRunnable”没有用,更清楚的问题是:情况是这样我有3种类型的身体:敌人,玩家和子弹,敌人有-10f速度和子弹的速度为 10f,当敌人越界(小于 0 坐标)时它被摧毁,但如果我在敌人被摧毁的同时射击(并在 2-3 秒后)我的子弹速度从 10f 变为 0(甚至不知道为什么),在第二次点击后,我的程序因致命错误而崩溃:EXCEPTION_ACCESS_VIOLATION (0xc0000005)。

标签: libgdx destroy bullet


【解决方案1】:

修复它,createEnemy() 方法放在 world.destroyBody(body) 方法之后。

【讨论】:

    猜你喜欢
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    相关资源
    最近更新 更多