explбольшое спасибо, буду разбираться
но всё же хотел уточнить по своему коду, т.к. думаю, что это пулл или разубедите меня)
в этой части кода идёт проверка на событие - выход за сцену, если событие обнаруженно, то я удаляю слушатель событий энтер_фрейм для bullet(без него она не летит, увы), долее вызываю vectorBullet.fn_push_pool(i), передавая туда индекс bullet с событием, в public function fn_push_pool (i):void{ я создаю новую ссылку на bullet в вектор, далее удаляю ссылку с индексом экземпляра bullet вектора который вышел за сцену
Код AS3:
public function fn_null_bullet(e: Event): void {
var i = vectorBullet.vectorPool.length;
while (--i > -1) {
if (vectorBullet.vectorPool[i] != null) {
if (vectorBullet.vectorPool[i].stage != null) {
if (vectorBullet.vectorPool[i].y > stageX || vectorBullet.vectorPool[i].y < 150 || vectorBullet.vectorPool[i].x > stageY || vectorBullet.vectorPool[i].x < 10) {
_stage.removeEventListener(Event.ENTER_FRAME, vectorBullet.vectorPool[i].fn_speed);
vectorBullet.fn_push_pool(i);
_stage.removeChild(vectorBullet.vectorPool[i]);
vectorBullet.vectorPool[i] = null;
vectorBullet.vectorPool.splice(i, 1);
--gl_variable.index_bullet;
}
}
}
}
}
собственно я тут не создаю новый объект, просто меняю ссылки, уверен, можно проще, но пока так, минусы в производительности мне трудно оценить, так как я в процессе игры дергаю вектор
Код AS3:
}
public function fn_push_pool (i):void{
vectorPool.push(vectorPool[i]);
}
а вот этот отрывок нужен, если длинна пула недостаточна, т.к. количество bullet у меня зависит лишь от скорости нажатия на клавишу (вдруг чего поменяю, типо двойные выстрелы), а пул тогда сам в процессе игры растянется
Код AS3:
public function fn_add_pool ():void{
var vectorMovieClip = movieClip;
vectorPool.push(vectorMovieClip);
}