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

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

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

Регистрация: Jul 2017
Сообщений: 7
Question Обращение из кода класса к объекту на экране

Помогите пожалуйста разобраться как можно обращаться к объекту на экране из класса.
Я нашел смог найти решение только для панели действия в самом флеше т.е. размещение кода в кадре временной шкалы или самом объекте.
Там все просто это или по имени или через this.
Это не то.
Если у меня есть класс main который выполняет все функции и указан в свойствах документа .fla как основной класс. Как мне обратиться в нем к любому объекту на экране?
по идее нужно запрашивать у stage...
но я нашел вот такой код но он не работает.
Код AS1/AS2:
stage.getChildByName("Testname")
ошибка: TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".

Старый 02.07.2017, 09:57
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 2  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
DisplayList - не линейная модель, а иерархическая. Это значит, что каждый объект Sprite/MovieClip может хранить в себе ещё объекты, и там координаты будут относительными.
stage - корень DisplayList, в него никто не лезет, кроме новичков.
В stage хранится экземпляр главного класса(Main), ребёнком stage.
В свою очередь у вашего главного класса может быть ещё один ребёнок, Sprite/MovieClip, либо любой другой класс, унаследованный от DisplayObject.
Вы не будете обращаться к ребёнку в DisplayList через DisplayList, а будете обращаться к нему через ту же ссылку, через которую отправили его на сцену.

Код AS3:
var bag:Sprite = new Sprite();
bag.addChild(new Book());
bag.addChild(new Book());
var b:Book = new Book();
b.title = "My Little Princess";
b.mass = 1.24;
bag.addChild(b);
 
this.addChild(bag);
 
//Теперь, мне не нужно никак доставать его из DisplayList, 
//у меня ведь по прежнему есть ссылка на bag, и я буду обращаться к нему по ней.
 
bag.x = 100;
bag.y = 200;
bag.alpha = 0.7;
Проблема как раз в том, что так никто не делает, потому, что это некрасиво, неэффективно, нелогично и неудобно. Нужно всегда сохранять ссылку на объект, если он вам понадобится.
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 02.07.2017 в 15:19.
Старый 02.07.2017, 13:02
Рандом Рулит вне форума Посмотреть профиль Отправить личное сообщение для Рандом Рулит Найти все сообщения от Рандом Рулит
  № 3  
Ответить с цитированием
Рандом Рулит

Регистрация: Jul 2017
Сообщений: 7
Хорошо, тоесть возможность управления объектами, расположенными на сцене в самом флеше, а не созданными где то в коде, отсутствует? ну такая возможность есть только у не классового подхода.. Это странно

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Это чисто Ваши инсинуации.
Есть несколько причин, почему код в документ-классе не "видит" ваш объект на сцене.
1) объект появляется не в первом кадре, то есть на момент отработки кода его нет.
2) объект находится внутри другого объекта (контейнера).
3) у объекта имя (instance name) не уникальное, т.е. на сцене есть несколько объектов с одинаковым именем.
В остальных случаях должно работать — если объект в первом кадре, ему назначено instance name "Testname" и он находится непосредственно в данном ролике, к нему можно обратиться Testname.play() или this.Testname.play().
__________________
Reality.getBounds(this);

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

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

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


 


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


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