Судя по всему у вас пул используется не для оптимизации, а чтобы хранить список объектов, причём как-то странно
Там есть забирание мувиклипов из буфера и набивание _новых_ мувиклипов в буффер(который зовется пулом почему-то), а так, чтобы повторно использовались удалённые с экрана мувиклипы - не нашёл
Как бы оно могло выглядеть вообще БЕЗ пула (логика изменена, т.к. маловато кода для её восстановления, идентификаторы переименованы чисто для себя - у вас слишком суровый стиль кодирования):
Код AS3:
//Пуля та же, только переименования
package package_cl {
import flash.events.Event;
import package_cl.GlobalVariables;
public class Bullet extends bullet_mc {
private var globalVariables: GlobalVariables = new GlobalVariables();
public function Bullet() {
addEventListener(Event.ADDED_TO_STAGE, onEnterFrame);
}
public function onEnterFrame(e: Event): void {
x -= globalVariables.speed_bullet * Math.cos(rotation * Math.PI / 180);
y -= globalVariables.speed_bullet * Math.sin(rotation * Math.PI / 180);
}
}
}
package package_cl {
import flash.events.Event;
import flash.display.Stage;
import package_cl.MovieClipPool;
public class BulletsController {
private var stageX: int;
private var stageY: int;
private var _stage: Stage;
private var activeBullets:Vector.<Bullet> = new Vector.<Bullet>();// Это не пул, это просто список
public function BulletsController(stage:Stage) {
_stage = stage;
stageX = _stage.stageHeight - 20;
stageY = _stage.stageWidth - 20;
_stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
public function onEnterFrame(e: Event): void {
spawnSomeBullets();
removeInvisibleBullets();
}
private function spawnSomeBullets():void {
// Вашу задумку не могу угадать, поэтому просто создадим 10 пуль
for (var i:int = 0; i < 10; i++) {
var bullet:Bullet = new Bullet();
bullet.x = _x;
bullet.y = _y;
bullet.rotation = i * 30;
// Не знаю зачем здесь слушатель ещё и на стейдж, но пусть будет
_stage.addEventListener(Event.ENTER_FRAME, bullet.onEnterFrame)
_stage.addChild(bullet);
activeBullets.push(bullet);
}
}
private function removeInvisibleBullets(): void {
for (var i:int = activeBullets.length; i-- > 0;) // --> - оператор DownTo :)
{
Bullet bullet = activeBullets[i];
if (bullet != null) {
if (bullet.stage != null) {
if (bullet.y > stageX || bullet.y < 150 || bullet.x > stageY || bullet.x < 10) {
_stage.removeEventListener(Event.ENTER_FRAME, bullet.onEnterFrame);
_stage.removeChild(bullet);
activeBullets.splice(i, 1);
}
}
}
}
}
}
}
А теперь с "нормальным" пулом:
Код AS3:
package package_cl {
import flash.events.Event;
import flash.display.Stage;
import package_cl.MovieClipPool;
public class BulletsController {
private var stageX: int;
private var stageY: int;
private var _stage: Stage;
private var activeBullets:Vector.<Bullet> = new Vector.<Bullet>();// Это не пул, это просто список
private var pool = new BulletPool();// ИЗМЕНЕНИЕ 1
public function BulletsController(stage:Stage) {
_stage = stage;
stageX = _stage.stageHeight - 20;
stageY = _stage.stageWidth - 20;
_stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
public function onEnterFrame(e: Event): void {
spawnSomeBullets();
removeInvisibleBullets();
}
private function spawnSomeBullets():void {
// Вашу задумку не могу угадать, поэтому просто создадим 10 пуль
for (var i:int = 0; i < 10; i++) {
var bullet:Bullet = pool.newBullet();// ИЗМЕНЕНИЕ 2
bullet.x = _x;
bullet.y = _y;
bullet.rotation = i * 30;
// Не знаю зачем здесь слушатель ещё и на стейдж, но пусть будет
_stage.addEventListener(Event.ENTER_FRAME, bullet.onEnterFrame)
_stage.addChild(bullet);
activeBullets.push(bullet);
}
}
private function removeInvisibleBullets(): void {
for (var i:int = activeBullets.length; i-- > 0;) // --> - оператор DownTo :)
{
Bullet bullet = activeBullets[i];
if (bullet != null) {
if (bullet.stage != null) {
if (bullet.y > stageX || bullet.y < 150 || bullet.x > stageY || bullet.x < 10) {
_stage.removeEventListener(Event.ENTER_FRAME, bullet.onEnterFrame);
_stage.removeChild(bullet);
activeBullets.splice(i, 1);
pool.releaseBullet();// ИЗМЕНЕНИЕ 3
}
}
}
}
}
}
}
package package_cl{
import flash.display.MovieClip;
public class BulletPool {
private var vector:Vector.<Bullet> = new Vector.<Bullet>();
public function BulletPool() {
}
public function newBullet():Bullet{
if (vector.length > 0)
return vector.pop();// pop удаляет последний элемент и возвращает его
return new Bullet();
}
public function releaseBullet(movieClip:Bullet):void{
vector.push(movieClip);
}
}
}
Код вряд ли рабочий (не проверял), но для чего нужен пул должно стать понятнее