Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.08.2012, 17:53
zerAlex2 вне форума Посмотреть профиль Отправить личное сообщение для zerAlex2 Найти все сообщения от zerAlex2
  № 1  
Ответить с цитированием
zerAlex2

Регистрация: Nov 2005
Сообщений: 148
По умолчанию Подключить объекты на один класс или снова проблема обращения

Можно ли кучу объектов расположенных на сцене подцепить на один класс?
Смысл таков:
-в Flash-е есть сцена с картой (у которой свой класс, подключенные через св-ва объекта)
-карта разделена на полсотни участков, у каждого своё имя (имена есть в массиве), но без подключенных классов
-внутри каждого из участков есть объекты и я к ним не могу достучаться, у них тоже нет своих классов
Во всяком случае, не хочет теперь:
Код AS3:
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);//Работает
 }
}
 
}
Обязательно ли этим подобъектам назначать классы? И можно ли им назначить один и тот же класс (не програмно, а через Flash)? Даже, наверно, не на один класс, а одно, как бы это сказать... поведение, что-ли.

Даже это не работает:
Код AS3:
trace(this.getChildByName(someStr).numChildren);//1119: Обращение возможного неопределенного свойства numChildren через ссылку со статическим типом flash.display:DisplayObject .
 
trace(this.getChildByName(someStr));// <- [object MovieClip]
Почему одни дочерние клипы без классов видны, а другие нет? И почему numChildren не выдаёт просто 0?

Добавлено через 2 часа 3 минуты
Вообще не догоняю ситуацию.
В основном коде пишу:
Код AS3:
var MyMap:myNewMap=new myNewMap();
MyMap.x=1300;
MyMap.y=550;
stage.addChild(MyMap);
MyMap.initMyMap(ListArray);
а myNewMap.sa:
Код AS3:
trace(stage.MyMap);// <- 1119: Обращение возможного неопределенного свойства MyMap через ссылку со статическим типом flash.display:Stage .

ТАК! Заменил все имена типа w001, w002, w003 на одно: hilight. Но это не принципиально. Написал:
Код AS3:
MovieClip(this.getChildByName(someStr)).hilight.visible=false;
и всё получиось, но при это я искренне не понимаю, что произошло. Если не сложно, объясните, чего не случилось-то?


Последний раз редактировалось zerAlex2; 10.08.2012 в 20:06.
Старый 10.08.2012, 20:14
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Так а что непонятно то? Все же рассказано в сообщениях об ошибках?
getChildByName(someStr) возвращает тип DisplayObject.
У него нет свойства numChildren. Это свойство есть только у типа DisplayObjectContainer. Несмотря на то, что в конкретной ситуации у Вас это МувиКлип (который так же является и Контейнером), метод возвращает супертип DisplayObject, у которого нельзя спросить свойство numChildren. Делайте кастинг:
Код AS3:
trace((this.getChildByName(someStr) as DisplayObjectContainer).numChildren);
Цитата:
trace(stage.MyMap);
Stage не динамический класс и у него нет свойства MyMap, откуда Вы это взяли? Если Вы расположили там экземпляр с именем MyMap, то воспользуйтесь getChildByName, наверное...
__________________
Reality.getBounds(this);

Старый 10.08.2012, 21:38
zerAlex2 вне форума Посмотреть профиль Отправить личное сообщение для zerAlex2 Найти все сообщения от zerAlex2
  № 3  
Ответить с цитированием
zerAlex2

Регистрация: Nov 2005
Сообщений: 148
Так откуда там взялся DisplayObjectContainer? Я ж везде указывал MovieClip?
Код AS3:
public class MyMap extends MovieClip { ...


Последний раз редактировалось zerAlex2; 10.08.2012 в 21:50.
Старый 10.08.2012, 21:46
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 4  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Код AS3:
public function getChildByName(name:String):DisplayObject
Но getChildByName даже у вас таки DisplayObject возвращает.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 10.08.2012, 21:50
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
MovieClip является наследником DisplayObjectContainer точно так же, как Ваш MyMap является МувиКлипом (extends MovieClip).
DisplayObjectContainer в свою очередь является наследником DisplayObject. Расширяет его функционал, позволяя добавлять "в себя" другие DisplayObject, именуемые children. Поэтому у него есть свойство "количество детей" — numChildren, а у его суперкласса DisplayObject не может быть детей и соответственно этого свойства тоже нет.
Почитайте книжки или хелп. Пересказывать такие базовые вещи в рамках форума долго и не эффективно.
__________________
Reality.getBounds(this);

Старый 10.08.2012, 21:51
zerAlex2 вне форума Посмотреть профиль Отправить личное сообщение для zerAlex2 Найти все сообщения от zerAlex2
  № 6  
Ответить с цитированием
zerAlex2

Регистрация: Nov 2005
Сообщений: 148
Код AS3:
public function getChildByName(name:String):DisplayObject
И после такого обязательно нужно ставить as MovieClip. Ага... я думал, оно ссылку на клип возвращает.
А as MovieClip или MovieClip(...), выходит, расширяет функционал объекта.
Да,в башке уложить кто и в каком виде что возвращает, не так-то просто. Особенно, если делаешь работку раз в год для своих, местечковую.

Старый 10.08.2012, 22:26
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 7  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
А as MovieClip или MovieClip(...), выходит, расширяет функционал объекта.
Нет, не расширяет. Всего-лишь проверяет, подходит ли объект на роль (англ. casting — "кастинг", оператор as), то есть содержится ли эталонный тип в его цепочке наследования.
Цепочка наследования всегда представлена в описании класса в Хелпе
(например MovieClip › Sprite › DisplayObjectContainer › InteractiveObject › DisplayObject › EventDispatcher › Object).
Цитата:
я думал, оно ссылку на клип возвращает.
Вам надо разобраться, что такое переменная, что такое Тип данных, что такое Наследование.
Да, оно возвращает ссылку на клип. Куда же еще. Просто гарантирует, что Тип данных при этом — DisplayObject. Потому что "детьми" не могут быть объекты, не имеющие в своей цепочке наследования DisplayObject. Могут быть детьми объекты классов-наследников. Но метод не может возвращать какой-то из их типов, это слишком конкретно. Если он будет возвращать Спрайт например, то как быть с ТекстФилдами? Вас ведь не смущает, что метод addChild() принимает только DisplayObject, а Вы ни разу в жизни не создавали никаких DisplayObject-ов, и не задумываясь передаете в addChild() спрайты, мувиКлипы и текстфилды, и даже шейпы.
__________________
Reality.getBounds(this);

Старый 10.08.2012, 23:53
zerAlex2 вне форума Посмотреть профиль Отправить личное сообщение для zerAlex2 Найти все сообщения от zerAlex2
  № 8  
Ответить с цитированием
zerAlex2

Регистрация: Nov 2005
Сообщений: 148
Это уж точно, надо разобраться.

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:56.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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