![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Banned
Регистрация: Nov 2012
Сообщений: 43
|
Режим отладки
ArgumentError: Error #2025: Предоставленный DisplayObject должен быть дочерним элементом вызывающего объекта. at flash.display::DisplayObjectContainer/removeChild() at src::Bullet/clearBullet()[E:\FlashWorks\FerdnProject\src\Bullet.as:69] at src::Enemy/delBullets()[E:\FlashWorks\FerdnProject\src\Enemy.as:90] package src { import flash.display.Sprite; import flash.display.Graphics; import flash.display.Shape; import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; public class Bullet extends MovieClip{ private var speedx:Number = 0; private var speedy:Number = 0; private var DEFAULT_BUL_SIZE:int = 6; private var DEFAULT_LIFE:int = 150; //Количество фремов к-е будет жить пуля private var DEFAULT_COLOR:uint = 0xFFCC66; private var TAKE_POSITIONX:int; private var TAKE_POSITIONY:int; private var BULLET:*; public function Bullet(TAKE_X:int, TAKE_Y:int) { var bullet:Sprite = new Sprite(); BULLET = bullet; TAKE_POSITIONX = TAKE_X; TAKE_POSITIONY = TAKE_Y; bullet.graphics.lineStyle(0,DEFAULT_COLOR,0); bullet.graphics.beginFill(DEFAULT_COLOR, 1); bullet.graphics.drawRect(TAKE_POSITIONX, TAKE_POSITIONY, DEFAULT_BUL_SIZE, DEFAULT_BUL_SIZE); bullet.graphics.endFill(); addChild(BULLET); addEventListener(Event.ADDED, funcAttack); addEventListener(Event.ENTER_FRAME, polet); } private function funcAttack(event:Event):void{ this.x += DEFAULT_BUL_SIZE/2; this.y += DEFAULT_BUL_SIZE/2; var xc:Number = mouseX - TAKE_POSITIONX; var yc:Number = mouseY - TAKE_POSITIONY; var tan:*; var ugol:*; if(mouseX > TAKE_POSITIONX){ tan = yc/xc; ugol = Math.atan(tan)*57; } if(mouseX < TAKE_POSITIONX){ tan = yc/xc; ugol = Math.atan(tan)*57; } if(mouseX > TAKE_POSITIONX){ speedx = 7*Math.cos(ugol*(Math.PI/180)); speedy = 7*Math.sin(ugol*(Math.PI/180)); } if(mouseX < TAKE_POSITIONX){ speedx = -7*Math.cos(ugol*(Math.PI/180)); speedy = -7*Math.sin(ugol*(Math.PI/180)); } } private function polet(e:Event):void{ this.x += speedx / 2; this.y += speedy / 2; } public function clearBullet():void{ removeChild(BULLET); //69 СТРОКА ЗДЕСЬ removeEventListener(Event.ADDED, funcAttack); removeEventListener(Event.ENTER_FRAME, polet); } } } |
|
|||||
|
[+ 1.0 08.10.14]
блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
|
Поменяй на
в иных классах removeChild работает вне функции где был addChild - ты заблуждаешься. Если объекта нет в списке отображения эта ошибка будет возникать всегда. Для уточнения есть ли объект в списке есть функция contains
|
|
|||||
|
Banned
Регистрация: Nov 2012
Сообщений: 43
|
Цитата:
Но что значит вне класса?... addChild и removeChild прописаны в одном классе, или же Вы имеете ввиду, что вызов removeChild из других классов провоцирует "сторонний" вызов removeChild? |
|
|||||
|
"гарантированная" конструкция
__________________
местонахождение |
|
|||||
|
[+ 1.0 08.10.14]
блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
|
GBee дал правильный диагноз - множественный вызов clearBullet(), а точнее ты методом clearBullet() пытался убрать объект которого уже не было в списке отображения.
|
|
|||||
|
я только по этому и написал, с моим подходом ошибок в подобных ситуациях не возникнет.
__________________
местонахождение |
|
|||||
|
Banned
Регистрация: Nov 2012
Сообщений: 43
|
Цитата:
Не могли бы Вы объяснить свой код? |
|
|||||
|
А что тут объяснять то?
Проверили, если вообще _bullet и сранили его родителя с super (только не пойму, почему не с this). Логично, что если parent равен super'у, то это значит что _bullet лежит на сцене и его можно removeChild. |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:59. |
|
|
« Предыдущая тема | Следующая тема » |
|
|