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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.09.2007, 03:16
Torero вне форума Посмотреть профиль Отправить личное сообщение для Torero Найти все сообщения от Torero
  № 1  
Ответить с цитированием
Torero
[+1.4 18.06.07]
 
Аватар для Torero

Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
По умолчанию Область видимости объекта "stage".

Доброго времени суток.
Поясните пожалуйста: почему когда я динамически создаю экземпляр класса, он перестает "видеть" сцену?

Код:
package {
import flash.display.Sprite;
    public class E extends Sprite {
		public function E(){
			trace("Stage(E): "+stage);
			var s:Sprite=new F;
		}
    }
}
Код:
package {
import flash.display.Sprite;
    public class F extends Sprite {
		public function F(){
			trace("Stage(F): "+stage);
		}
    }
}
Результат трассировки:
Stage(E): [object Stage]
Stage(F): null
__________________
А я Томат.

Старый 19.09.2007, 03:23
miramax вне форума Посмотреть профиль Отправить личное сообщение для miramax Посетить домашнюю страницу miramax Найти все сообщения от miramax
  № 2  
Ответить с цитированием
miramax
 
Аватар для miramax

Регистрация: Oct 2005
Адрес: Борисоглебск
Сообщений: 1,702
Отправить сообщение для miramax с помощью ICQ Отправить сообщение для miramax с помощью AIM Отправить сообщение для miramax с помощью MSN Отправить сообщение для miramax с помощью Yahoo Отправить сообщение для miramax с помощью Skype™
Код:
package {
import flash.display.Sprite;
    public class E extends Sprite {
		public function E(){
			trace("Stage(E): "+stage);
			var s:Sprite=new F();
addChild(s);
trace(s.stage);   //ok
		}
    }
}
__________________
AS3 | www.FLAPS.ru | Русские флэшеры самые умные флэшеры в мире. ©

Старый 19.09.2007, 03:31
Torero вне форума Посмотреть профиль Отправить личное сообщение для Torero Найти все сообщения от Torero
  № 3  
Ответить с цитированием
Torero
[+1.4 18.06.07]
 
Аватар для Torero

Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
Не... Вопрос в том, как увидеть stage в момент создания нового sprite,(в данном случае из класса "F"). Есть вариант поместить ссылку на stage в static-переменную или передавать ее в конструктор класса при создании каждого нового спрайта, но, мне кажется, это "кривые" решения...(Или я не прав?) Может есть варианты?

----
Собственно, потребность состоит в том, чтобы одни спрайты создавали другие, те,в свою очередь, создавали третьи и т.д., но при этом мне нужно, чтобы новые спрайты создавались не внутри тех, которые их создают, а на сцене - в процессе реализации натолкнулся на проблему со строкой "stage.addChild.." т.к. спрайт не "видит" сцены.. Объяснил как мог..))
__________________
А я Томат.


Последний раз редактировалось Torero; 19.09.2007 в 04:08.
Старый 19.09.2007, 05:43
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 4  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
displayObject видит stage только когда он добавлен в дисплэй лист
__________________
Хороший отдых - половина работы.

Старый 19.09.2007, 10:39
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Можно подписаться на ADDED_TO_STAGE и потом дальше работать.

Старый 20.09.2007, 01:58
2morrowMan вне форума Посмотреть профиль Отправить личное сообщение для 2morrowMan Найти все сообщения от 2morrowMan
  № 6  
Ответить с цитированием
2morrowMan
 
Аватар для 2morrowMan

Регистрация: Aug 2007
Сообщений: 467
Когда делаешь var s:Sprite=new F;, экземпляр класса Sprite создаеться только в памяти и он еще не знает кто у него stage! И когда ты этот спрайт добавишь на сцену, только тогда он узнает кто же у него этот stage!

Старый 20.09.2007, 03:09
Torero вне форума Посмотреть профиль Отправить личное сообщение для Torero Найти все сообщения от Torero
  № 7  
Ответить с цитированием
Torero
[+1.4 18.06.07]
 
Аватар для Torero

Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
Спасибо за ответы.
Решил проблему через static-переменную, ссылающуюся на stage - насчет правильности сомнительно, но писанины минимум..

---
Цитата:
Сообщение от 2morrowMan
он еще не знает кто у него stage!
Это как так? Потенциальных родителей при создании Sprite действительно может быть много, но ведь stage-то только одна.. По сути, stage - глобальный объект, который должен быть виден и доступен из любого места в коде, как _root в AS2. Или я неправ?
__________________
А я Томат.


Последний раз редактировалось Torero; 20.09.2007 в 03:43.
Старый 20.09.2007, 10:27
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Да, хоть оператор new позволяет не использовать скобки (это одна из загадок, почему), надо не лениться и писать.

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

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

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


 


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


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