2013-04-04 2 views
1

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

public function collect():void { 
      try { 
       Main.powerUps.splice(index, 1); 
       stage.removeChild(this); 
      }catch (e:Error) { 
       trace("Error in splice"); 
      } 
     } 
} 

Затем, когда я создаю свой объект PowerUp я прохожу это параметр, который получает присваивается индекс, который является длина массива мощности ИБП в то время. Может ли кто-нибудь увидеть, что не так с этим кодом или (желательно) предоставить более элегантное решение? Заранее благодарю за любую помощь.

ответ

1

Элегантное решение: используйте indexOf() и splice() вместе!

var index:int = Main.powerUps.indexOf(powerup); 
Main.powerUps.splice(index, 1); 

Где powerup является ссылкой на объект, хранящийся в массиве Main.powerUps.

Я также создал небольшой класс некоторое время назад, что может быть полезным для вас:

Он имеет метод .remove(), так что вы можете просто сделать:

powerUps.remove(powerup); 
Смежные вопросы