![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
Хотел вообще знать как правильно обходиться со stage, покопавшись в нескольких исходниках понял что ей надо в свойствах присваивать класс, но после присвоения у меня в классе Main перестали видиться публичные методы, неужели такая манипуляция (в свойствах stage присваивать класс) делает этот класс статичным?
Если да, то как вызывать методы класса Main? делать их статичными и обращаться через класс? |
|
|||||
|
Покажите каким образом вы присвоили stage класс Main (через Document class?). И где теперь не видно публичных методов Main?
|
|
|||||
|
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
вот таким макаром в свойтвах stage прописываем класс
потом допустим package classes{ import classes.timeScale.TimeScale; } public class Main extends Sprite { public function Main() { drawTimeScale(); } private function drawTimeScale ():void { var timeScale:TimeScale= new TimeScale(this); } public function tracer ():void { trace("функция класса Main"); } } } |
|
|||||
|
Вот всё в точности до наоборот - будет работать
![]() Главный класс на то и главный, что он должен всё решать и всем руководить. Что вам мешает сделать так: package classes { public class Main extends Sprite { public function Main() { drawTimeScale(); } private function drawTimeScale ():void { var timeScale:TimeScale= new TimeScale(); addChild(timeScale); tracer(); } public function tracer ():void { trace("функция класса Main"); } } } Речь о том, что это одно и то же по факту в классе Main, и в классе TimeScale Только это ОЧЕНЬ плохая практика, когда объект сам себя добавляет куда-то
__________________
adobe AS3 manual |
|
|||||
|
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
package classes{ import classes.timeScale.TimeScale; import classes.dateScale.DateScale; public class Main extends Sprite { private var dateScale:DateScale; public function Main() { drawTimeScale(); drawDateScale(); } private function drawTimeScale ():void { var timeScale:TimeScale= new TimeScale(); addChild(timeScale); } private function drawDateScale ():void { this.dateScale = new DateScale(); addChild(dateScale); } public function getVarFromDateScale ():void { this.dateScale.getValue(); } } } package classes.timeScale { import classes.Main; public class TimeScale extends TimeScaleDragger { public function TimeScale() { var obj1:Obj1 = new Obj1(); this.addChild(obj1); } } } package classes.timeScale { public class Obj1 extends Sprite { public function Obj1() { var obj2:Obj2 = new Obj2(); this.addChild(obj2); } } } Последний раз редактировалось Isfet; 21.09.2012 в 10:05. |
|
|||||
|
В первом приведенном вами примере вы обращаетесь к Майн до конца инициализации, а он в это время ещё равен null, то есть его фактически не существует. Инициализация объекта заканчивается тогда когда выполнится конструктор,и методы указанные в конструкторе ( а если в нем указана инициализация нижележащих объектов то и их конструкторы и методы указанные в них ). После этого можно обратиться уже к Майн, как к объекту.
По поводу второго примера strangedk вам уже подсказал, что обращаться из дочерних классов в родительские не корректно. Это создает проблемы при импорте в другие проекты и при отладке. Чаще всего это решается диспатчем события из дочернего объекта о том, что его сост. изменилось. Родительский объект получает это событие и решает что в связи с этим он должен делать как и чье состояние он должен изменить и т.д. |
|
|||||
|
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
а можете поправить мой код,чтобы было понятно, как нужно диспатчить клик Child-а, и как потом вызывать функцию Main класса?
|
|
|||||
|
Цитата:
package { import flash.display.Sprite; public class Main extends Sprite { public function Main():void { var timeScale:TimeScale = new TimeScale(this); } public function tracer():void { trace( "Main.tracer" ); } } } import flash.display.Sprite; class TimeScale extends Sprite { public function TimeScale(main:Main) { graphics.beginFill(0xC0C0C0); graphics.drawRect(0, 0, 50, 50); main.addChild(this); main.tracer(); //Main.tracer } } (ну не считая того, что так конечно не стоит делать) |
|
|||||
|
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
Цитата:
Хранить статический метод, который вытаскивает ссылку на Main класс? Стоит ли Stage присваивать класс Main? Как в таком случае оращаться к Main из детей(можно обращаться this.root as Main но не знаю правильно ли это)? Как я понял что когда Document class ставишь Main он становится статичным, и как тогда к нему обращаться из детей? |
|
|||||
|
да, а я то иначе считал (http://www.flasher.ru/forum/showthre...=173074&page=3)
|
![]() |
![]() |
Часовой пояс GMT +4, время: 13:13. |
|
|
« Предыдущая тема | Следующая тема » |
|
|