![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#1
|
|
Новичок ![]() Группа: Новичок Сообщений: 1 Регистрация: 21.08.2011 Пользователь №: 10633 ![]() |
Привет! Я недавно начал изучать 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 пикселей сверху для наглядности исчезает пуля или нет. Спасибо ![]() |
|
|
![]()
Сообщение
#2
|
|
![]() Активист ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 987 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
Заметьте - когда пуля одна - всё прекрасно работает. Значит с дочерностью дисплейных объектов проблем нет.
Мне вот две вещи непонятны: 1) Что делает функция update? 2) Ну из дисплей-листа пуля удаляется через removeChild. Но в массиве bullets_arr она по-прежнему остается! И когда ВТОРОЙ раз из массива bullets_arr берется этот объект, то он УЖЕ понятно не является дочерним к стейджу! NB! 9) Необходимость деструкторов |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 17.10.2011 - 21:19 |