Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   ошибка ArgumentError: Error #2025 (http://www.flasher.ru/forum/showthread.php?t=207680)

delphic 30.04.2014 01:23

ошибка ArgumentError: Error #2025
 
накидал простенький пример, два квадрата на сцене фла, один типа герой - pers, другой скажем стена с именем - krasniKvadrat, вопрос,почему выходит такая ошибка и как можно исправить - ArgumentError: Error #2025: Предоставленный DisplayObject должен быть дочерним элементом вызывающего объекта.
Код AS3:

package
{
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.events.KeyboardEvent;
        import flash.ui.*;
 
        public class PrimerHero extends MovieClip
        {
      private var left:Boolean;
                public function PrimerHero()
                {
                        stage.addEventListener(Event.ENTER_FRAME,ef)
                        stage.addEventListener(KeyboardEvent.KEY_DOWN,kd)
                        stage.addEventListener(KeyboardEvent.KEY_UP,ku)
                }
        private function ef(e:Event):void
        {
                if(pers.hitTestObject(krasniKvadrat))
                  {
                          removeChild(krasniKvadrat);
                  }
                if(left)
                {
                        pers.x += 6;
                }
        }
        private function kd(e:KeyboardEvent):void
        {
                if(e.keyCode == Keyboard.RIGHT)
                {
                        left = true;
                }
        }
        private function ku(e:KeyboardEvent):void
        {
                left = false;
        }
  }
}


КорДум 30.04.2014 01:29

Для начала нужно понять, у кого в дисплей листе вообще живет krasniKvadrat и удалить корректно.

А можно и не узнавать и набыдлокодить:
Код AS3:

if (krasniKvadrat.parent) {
    krasniKvadrat.parent.removeChild(krasniKvadrat);
}

Но я вам этого не говорил. Нет-нет.

delphic 30.04.2014 02:04

Цитата:

Сообщение от КорДум (Сообщение 1164944)
Для начала нужно понять, у кого в дисплей листе вообще живет krasniKvadrat и удалить корректно.

А можно и не узнавать и набыдлокодить:
Код AS3:

if (krasniKvadrat.parent) {
    krasniKvadrat.parent.removeChild(krasniKvadrat);
}

Но я вам этого не говорил. Нет-нет.

а как можно узнать? Если например без быдлокодерства

Bletraut 30.04.2014 04:02

Цитата:

а как можно узнать? Если например без быдлокодерства
Код AS3:

trace(krasniKvadrat.parent);

Узнаем имя родителя ну и дальше пляшем от него ХД

delphic 30.04.2014 11:07

Цитата:

Сообщение от Bletraut (Сообщение 1164951)
Код AS3:

trace(krasniKvadrat.parent);

Узнаем имя родителя ну и дальше пляшем от него ХД

ну это я делал - [object PrimerHero]
иииии что мне это дает:o

Добавлено через 1 час 18 минут
и еще, вот подробней.смысл такой что берем детей что на сцене и смотрим на сталкивание.
room это имя мувика в котором лежат дети.
Код AS3:

platformType =="wall"

это есть у меня класс, беру мувик со стеной, к нему прикручевую класс в котором есть строка -
Код AS3:

platformType = "wall";

Код AS3:

                                        if(platform[i].platformType =="wall")
                                        { 
                                                  room.removeChild(platform[i]);
                                                platform.splice(i,1);
                                        }

ну и как бы при столкновении героя со стеной,изображение исчезает, но вот такая ошибка выходит - Параметр hitTestObject не должен быть равен нулю. хотя если трэйсом проверить
Код AS3:

platform[i]

, выдает что есть объект в момент столкновения
можно конечна еще одно изображение сделать,прикрутить его к классу,сделать это изображение невидимым и положить вне сцены, тогда ошибки не будет)))) но все равно че за прикол такой

caseyryan 30.04.2014 12:04

Цитата:

Сообщение от КорДум (Сообщение 1164944)
Для начала нужно понять, у кого в дисплей листе вообще живет krasniKvadrat и удалить корректно.

А можно и не узнавать и набыдлокодить:
Код AS3:

if (krasniKvadrat.parent) {
    krasniKvadrat.parent.removeChild(krasniKvadrat);
}

Но я вам этого не говорил. Нет-нет.

Сань, да какой это быдлокод. Вполне нормальный подход для ас3. То, что у объекта вообще есть ссылка на родителя уже говорит о том, что ее можно использовать. Да и корявая работа метода contains() сама по себе вынуждает это делать

Rivexe 30.04.2014 12:30

Цитата:

Сообщение от caseyryan (Сообщение 1164959)
Да и корявая работа метода contains() сама по себе вынуждает это делать

Извиняюсь за оффтоп, но в чем корявость этого метода? Если имеется ввиду что он проверяет и нижестоящие уровни, то это вроде не корявая работа, а заложенный функционал описанный в документации. Или есть ещё подводные камни?

in4core 30.04.2014 13:25

Rivexe - поддерживаю вопрос. Никогда не было проблем с контейнс, всегда юзаю.

КорДум 30.04.2014 13:50

Ну contains проверяет всю иерархию вложенностей дисплей листа до самого конца от того узла, где был вызван. Я не знаю, где вообще может понадобится узнавать, что где-то в пятом колене дисплей листа есть этот ДО, посему могли бы сделать метод упрощенным, завязанным на parent или хотя бы сделали бы вторым параметром флаг recursive, по умолчанию в false.

Под быдлокодерством я подразумевал то, что почему-то вдруг мы не знаем, кто содержит объект и обращаемся к его безликому по сути паренту. Это свидетельствует о том, что работа программы выходит из-под контроля, что чревато проблемами.

Добавлено через 8 минут
2ТС
Возьмите на вооружение дебаггер и смотрите построчно, что там где нулл. Очень тяжело что-то сказать по текущей информации. И ставьте проверки на существование parent.

caseyryan 30.04.2014 14:03

Цитата:

Сообщение от Rivexe (Сообщение 1164960)
Извиняюсь за оффтоп, но в чем корявость этого метода? Если имеется ввиду что он проверяет и нижестоящие уровни, то это вроде не корявая работа, а заложенный функционал описанный в документации. Или есть ещё подводные камни?

Именно это и есть корявая работа. Зачем нужна такая функция вообще? Где она реально может понадобится?


Часовой пояс GMT +4, время: 20:43.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.