Просмотр полной версии : Область видимости объекта "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
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
}
}
}
Не... Вопрос в том, как увидеть stage в момент создания нового sprite,(в данном случае из класса "F"). Есть вариант поместить ссылку на stage в static-переменную или передавать ее в конструктор класса при создании каждого нового спрайта, но, мне кажется, это "кривые" решения...(Или я не прав?) Может есть варианты?
----
Собственно, потребность состоит в том, чтобы одни спрайты создавали другие, те,в свою очередь, создавали третьи и т.д., но при этом мне нужно, чтобы новые спрайты создавались не внутри тех, которые их создают, а на сцене - в процессе реализации натолкнулся на проблему со строкой "stage.addChild.." т.к. спрайт не "видит" сцены.. Объяснил как мог..))
artcraft
19.09.2007, 05:43
displayObject видит stage только когда он добавлен в дисплэй лист
Можно подписаться на ADDED_TO_STAGE и потом дальше работать.
2morrowMan
20.09.2007, 01:58
Когда делаешь var s:Sprite=new F;, экземпляр класса Sprite создаеться только в памяти и он еще не знает кто у него stage! И когда ты этот спрайт добавишь на сцену, только тогда он узнает кто же у него этот stage! :)
Спасибо за ответы.
Решил проблему через static-переменную, ссылающуюся на stage - насчет правильности сомнительно, но писанины минимум..
---
он еще не знает кто у него stage! :)
Это как так? Потенциальных родителей при создании Sprite действительно может быть много, но ведь stage-то только одна.. По сути, stage - глобальный объект, который должен быть виден и доступен из любого места в коде, как _root в AS2. Или я неправ?
Да, хоть оператор new позволяет не использовать скобки (это одна из загадок, почему), надо не лениться и писать.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.