PDA

Просмотр полной версии : Область видимости объекта "stage".


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


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

miramax
19.09.2007, 03:23
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
}
}
}

Torero
19.09.2007, 03:31
Не... Вопрос в том, как увидеть stage в момент создания нового sprite,(в данном случае из класса "F"). Есть вариант поместить ссылку на stage в static-переменную или передавать ее в конструктор класса при создании каждого нового спрайта, но, мне кажется, это "кривые" решения...(Или я не прав?) Может есть варианты?

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

artcraft
19.09.2007, 05:43
displayObject видит stage только когда он добавлен в дисплэй лист

etc
19.09.2007, 10:39
Можно подписаться на ADDED_TO_STAGE и потом дальше работать.

2morrowMan
20.09.2007, 01:58
Когда делаешь var s:Sprite=new F;, экземпляр класса Sprite создаеться только в памяти и он еще не знает кто у него stage! И когда ты этот спрайт добавишь на сцену, только тогда он узнает кто же у него этот stage! :)

Torero
20.09.2007, 03:09
Спасибо за ответы.
Решил проблему через static-переменную, ссылающуюся на stage - насчет правильности сомнительно, но писанины минимум..

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

etc
20.09.2007, 10:27
Да, хоть оператор new позволяет не использовать скобки (это одна из загадок, почему), надо не лениться и писать.