2015-11-28 6 views
0

в моей плите libgdx 2D прыжок и запуск игры Я хочу создавать тела каждую секунду в позиции моих пушек, но, насколько я знаю, каждую секунду стреляет только одна пушка. Может ли кто-нибудь помочь мне, как это исправить?Libgdx Box2D создает тела

Heres где я создаю свои пушки:

//create cannon bodies/fixtures 
    cannons = new Array<Cannon>(); 
    for (MapObject object : map.getLayers().get(5).getObjects().getByType(RectangleMapObject.class)) { 
     recta = ((RectangleMapObject) object).getRectangle(); 
     cannons.add(new Cannon(screen, recta.getX(), recta.getY())); 
    } 

} 

    public float X() { 
     return recta.getX(); 
    } 

    public float Y() { 
     return recta.getY(); 
    } 

Здесь я добавляю каноны (который работает для каждой позиции):

private Array<Bullet> bullets; 

public Cannon(PlayScreen screen, float x, float y) { 
    super(screen, x, y); 
    setBounds(getX(), getY(), getWidth(), getHeight()); 
} 

public Cannon() { 
    super(); 
} 

@Override 
protected void defineTrap() { 
    b2body = Body.addStatic(b2body, world, 0f, getX(), getY(), 32, x.CANNON_BIT, "cannon"); 
    createBullet(); 
} 

public void createBullet() { 
    bullets = new Array<Bullet>(); 
    bullets.add(new Bullet(screen, getX(), getY())); 
} 

Здесь я добавляю первую пулю (что waoks тоже для всех пушек):

public Bullet(PlayScreen screen, float x, float y) { 
    super(screen, x, y); 
    setBounds(getX(), getY(), getWidth(), getHeight()); 
} 

public Bullet() { 

} 

@Override 
public void defineTrap() { 
    b2body = Body.addDynamic(b2body, world, 0f, getX(), getY(), 8, x.BULLET_BIT, "bullet"); 
    b2body.setLinearVelocity(new Vector2(-1f, 0)); 
    b2body.setGravityScale(0); 
} 

И здесь я хочу, чтобы каждый пушки стрелять, но только один делает (его мой визуализации mehtod):

if (TimeUtils.timeSinceNanos(startTime) > 1000000000) { 
     bullets = new Array<Bullet>(); 
     bullets.add(new Bullet(this, creator.X(), creator.Y())); 
     startTime = TimeUtils.nanoTime(); 
    } 

Надеюсь, вы можете мне помочь!

ответ

1

Вы должны перебрать все пушки и вызвать метод, который может получить доступ к закрытому полю bullets, я назвал его addBullet(Screen, float, float). Возможно, вам нужно будет что-то сделать с creator до addBullet(), так как я не уверен, что вы с ним делаете.

if (TimeUtils.timeSinceNanos(startTime) > 1000000000) { 
    for(int i = 0; i < Cannons.size; i++) { 
     Cannon cannon = cannons.get(i); 
     cannon.addBullet(this, creator.X(), creator.Y()); 
    } 
    startTime = TimeUtils.nanoTime(); 
} 

Затем создайте метод addBullet в классе Cannon.

public void addBullet(Screen screen, float x, float y) { 
    bullets.add(new Bullet(screen, x, y)); 
} 

Насколько я могу сказать, что нет никаких оснований переинициализировать массив пули каждый раз, как вы делали. Просто используйте pop(); или removeIndex(index);, чтобы удалить элементы массива, которые больше не используются. Вы можете добавить еще несколько методов в класс Cannon

public void removeLastBullet() { 
    bullets.pop(); 
} 

public void removeBullet(int i) { 
    bullets.removeIndex(i); 
} 
+0

Хорошо, я сделал это и повторно инициализировал mapobjects в методе визуализации. Спасибо за вашу помощь! – Tobls

Смежные вопросы