|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Nov 2005
Сообщений: 148
|
Подключить объекты на один класс или снова проблема обращения
Можно ли кучу объектов расположенных на сцене подцепить на один класс?
Смысл таков: -в Flash-е есть сцена с картой (у которой свой класс, подключенные через св-ва объекта) -карта разделена на полсотни участков, у каждого своё имя (имена есть в массиве), но без подключенных классов -внутри каждого из участков есть объекты и я к ним не могу достучаться, у них тоже нет своих классов Во всяком случае, не хочет теперь: public class myMap extends MovieClip { ... function addLesteners(myArray:Array):void{ var someStr:String; var someStrB:String; for (var i:Number=0; i<myArray.length; i++) { someStr=myArray[i][3];//строчка типа: Uch001 someStrB="w"+someStr.slice(3,20);//Переводится в: w001 - и каждый подобъект содержит клип с таким роликом w001, w002, w003 this.getChildByName(someStr).visible=false;//Если оставить так, то работает this.getChildByName(someStr).getChildByName(someStrB).visible=false;//А так, не работает this.getChildByName(someStr).addEventListener(MouseEvent.ROLL_OVER, tochOnROLL_OVER_MO);//Работает } } } Даже это не работает: trace(this.getChildByName(someStr).numChildren);//1119: Обращение возможного неопределенного свойства numChildren через ссылку со статическим типом flash.display:DisplayObject . trace(this.getChildByName(someStr));// <- [object MovieClip] Добавлено через 2 часа 3 минуты Вообще не догоняю ситуацию. В основном коде пишу: var MyMap:myNewMap=new myNewMap(); MyMap.x=1300; MyMap.y=550; stage.addChild(MyMap); MyMap.initMyMap(ListArray); trace(stage.MyMap);// <- 1119: Обращение возможного неопределенного свойства MyMap через ссылку со статическим типом flash.display:Stage . ТАК! Заменил все имена типа w001, w002, w003 на одно: hilight. Но это не принципиально. Написал: и всё получиось, но при это я искренне не понимаю, что произошло. Если не сложно, объясните, чего не случилось-то? Последний раз редактировалось zerAlex2; 10.08.2012 в 20:06. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Так а что непонятно то? Все же рассказано в сообщениях об ошибках?
getChildByName(someStr) возвращает тип DisplayObject. У него нет свойства numChildren. Это свойство есть только у типа DisplayObjectContainer. Несмотря на то, что в конкретной ситуации у Вас это МувиКлип (который так же является и Контейнером), метод возвращает супертип DisplayObject, у которого нельзя спросить свойство numChildren. Делайте кастинг: Цитата:
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Nov 2005
Сообщений: 148
|
Так откуда там взялся DisplayObjectContainer? Я ж везде указывал MovieClip?
Последний раз редактировалось zerAlex2; 10.08.2012 в 21:50. |
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Но getChildByName даже у вас таки DisplayObject возвращает.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
MovieClip является наследником DisplayObjectContainer точно так же, как Ваш MyMap является МувиКлипом (extends MovieClip).
DisplayObjectContainer в свою очередь является наследником DisplayObject. Расширяет его функционал, позволяя добавлять "в себя" другие DisplayObject, именуемые children. Поэтому у него есть свойство "количество детей" — numChildren, а у его суперкласса DisplayObject не может быть детей и соответственно этого свойства тоже нет. Почитайте книжки или хелп. Пересказывать такие базовые вещи в рамках форума долго и не эффективно.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Nov 2005
Сообщений: 148
|
И после такого обязательно нужно ставить as MovieClip. Ага... я думал, оно ссылку на клип возвращает.
А as MovieClip или MovieClip(...), выходит, расширяет функционал объекта. Да,в башке уложить кто и в каком виде что возвращает, не так-то просто. Особенно, если делаешь работку раз в год для своих, местечковую. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Цепочка наследования всегда представлена в описании класса в Хелпе (например MovieClip › Sprite › DisplayObjectContainer › InteractiveObject › DisplayObject › EventDispatcher › Object). Цитата:
Да, оно возвращает ссылку на клип. Куда же еще. Просто гарантирует, что Тип данных при этом — DisplayObject. Потому что "детьми" не могут быть объекты, не имеющие в своей цепочке наследования DisplayObject. Могут быть детьми объекты классов-наследников. Но метод не может возвращать какой-то из их типов, это слишком конкретно. Если он будет возвращать Спрайт например, то как быть с ТекстФилдами? Вас ведь не смущает, что метод addChild() принимает только DisplayObject, а Вы ни разу в жизни не создавали никаких DisplayObject-ов, и не задумываясь передаете в addChild() спрайты, мувиКлипы и текстфилды, и даже шейпы.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Nov 2005
Сообщений: 148
|
Это уж точно, надо разобраться.
|
Часовой пояс GMT +4, время: 18:25. |
|
« Предыдущая тема | Следующая тема » |
|
|