Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: проблема с removeChild в массиве
Flash Zone Forum > Macromedia Flash > ActionScript
reQuiem
Привет! Я недавно начал изучать AS3 и в реализации своей первого более менее серьезной задумки столкнулся с проблемой.
Проект - игра, скроллшутер. При клике рождается объект "Пуля" и при определенных координатах ( уход за область игры) она должна уничтожиться. Все ок когда пуля одна. Но тк мне надо чтобы я мог делать неограниченное количество выстрелов то я помещаю пули в массив и каждый кадр делаю апдейт циклом столько раз соклько пуль на сцене. Но когда пуля достигает координат в которых должна быть уничтожена возникает ошибка "ArgumentError: Error #2025: Предоставленный DisplayObject должен быть дочерним элементом вызывающего объекта.
at flash.display::DisplayObjectContainer/removeChild()
at game_fla::MainTimeline/moveBullet()"

Понятно что я как то неправильно удаляю. Подскажите, как правильно пожалуйста.

Вот часть кода о которой я говорю.

Код
stop();

import flash.events.MouseEvent;
import flash.display.MovieClip;
import flash.events.Event;

var numOfitems:Number=0;
var bullets_arr:Array = new Array();

stage.addEventListener (MouseEvent .MOUSE_DOWN , addBullet);

function addBullet(c:MouseEvent ):void {
    
    var bullet:mc_bullet = new mc_bullet();
    addChild(bullet);
    bullets_arr.push(bullet);
    numOfitems = bullets_arr.length;
}

addEventListener(Event.ENTER_FRAME, moveBullet);
function moveBullet(e:Event) :void
{
    for(var i:int=0; i < numOfitems; i++ )
    {
        bullets_arr[i].update();
        if (bullets_arr[i].y < 200)
        {
            removeChild(DisplayObject(bullets_arr[i]));
            trace("bullet removed by range");
        }
        
    }
}


Я не очень понимаю кто является вызывающим объектом для bullets_arr[i] - bullets_arr? stage? или может я вообще неправильно делаю...
Тут граница установлена в 200 пикселей сверху для наглядности исчезает пуля или нет.

Спасибо smile.gif
chingachgoog
Заметьте - когда пуля одна - всё прекрасно работает. Значит с дочерностью дисплейных объектов проблем нет.
Мне вот две вещи непонятны:
1) Что делает функция  update?
2) Ну из дисплей-листа пуля удаляется через removeChild. Но в массиве bullets_arr она по-прежнему остается! И когда ВТОРОЙ раз из массива bullets_arr берется этот объект, то он УЖЕ понятно не является дочерним к стейджу!

NB!

9) Необходимость деструкторов


Русская версия IP.Board © 2001-2013 IPS, Inc.