2016-09-05 2 views
-1

Я хочу, чтобы моя программа удаляла объект, который больше не отображается в окне проигрывателя для сохранения памяти. Я пытаюсь что-то вроде этого:Как удалить пулю, когда она достигает определенного расстояния? JAVA Libgdx

В классе игры (метод отрисовки):

if(fireDelay >= 0.4f){ 
      Laser laser = new Laser(); 
      laser.shoot(nave.getRotation(), nave.getX(), nave.getY()); 
      escenario.addActor(laser); 
      if(laser.getLimit()){ 
      escenario.addAction(Actions.removeActor(laser)); 
      fireDelay = 0;  
      } 
     } 

В классе лазерной

public boolean getLimit(){ 
    return limit; 
} 

@Override 
public void act(float dt){ 
    super.act(dt); 
    elapsedTime += dt; 
    distancia += dt; 
    setRotation(rotacion);  
    if(distancia == 0.4f) 
     limit = true; 
} 

Но очевидно ... не работает ... Я тоже увидел, что вы можете справиться с пулями с арраистом, но я стараюсь это сделать, и я не мог его получить ... Как мы могли это сделать?

+1

Вы говорите здесь три вещи. Вы хотите удалить пулю, когда: 1: пуля не отображается игроку. 2: Когда пуля прошла заданное расстояние. 3: Когда пуля жива в течение 4 секунд. Который из них? – IronMonkey

+0

@ IronMonkey Последнее, что вы упомянули (как видно из кода), это то, как я это делаю (принимая время с dt) .... либо расстояние, либо время, независимо от того, как вы это делаете, я просто хочу удалить пуля игры ... – TwoDent

ответ

0

Я нашел решение! Я просто добавить эту строку кода:

laser.addAction(Actions.sequence(Actions.delay(2), Actions.fadeOut(0.5f), Actions.visible(false))); 

перед съемками, сохранить объект в ArrayList затем перебирать и удалять их.

removeList = new ArrayList<Laser>(); 

for (Laser laser : laserList) 
{ 
wraparound(laser); 
if (!laser.isVisible()) 
removeList.add(laser); 
} 
for (Laser ba : removeList) 
{ 
ba.destroy(); 
} 

Я обнаружил, что это работает, потому что я начал беспорядочно стрелять по всему экрану игры и игра никогда не медленно или замораживать!