2014-09-15 3 views
0

Так что в основном я получаю сообщение об ошибке при попытке уничтожить тела, которые не находятся в границах экрана. Кроме того, мои одного тела типа начинает действовать странно, когда другие органы типа разрушаются (пример пуля начинает двигаться в обратном направлении) вот примеры кода:Libgdx уничтожает несколько тел

Maingame класс петли:

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; 
    } 
+0

Вы делаете это, пока работает 'world.step'? Это означает, например, в обратном вызове? – noone

+0

Да, мировой шаг работает в том же методе, где я делаю для цикла – Rimwis

+0

, он находится в том же методе или работает параллельно? – noone

ответ

0

Исправлено, метод createEnemy() размещен после метода world.destroyBody (body).