![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2014
Сообщений: 56
|
Часто сталкивался с подобной ошибкой, но каким-то образом не запариваясь решал, писал по другому немного. Вот скажите, пожалуйста, как мне действовать таким образом, вызывать настройку окна из майна, через класс. Было бы удобно, но говорит stage не существует. В самом Main, срабатывает любой вызов stage, что мне сделать для подобного подхода?
package { import flash.display.Sprite; import system.Window; public class Main extends Sprite { public function Main() { Window.init(); } } } package system { import flash.display.Sprite; public class Window extends Sprite { private static var window:Window; public function Window() { } public function init():void { stage.addChild(window); } public static function init():void { window = new Window(); window.init(); //window.stage.stageWidth = 2000; } } } TypeError: Error #1009: Cannot access a property or method of a null object reference. at system::Window/init()[D:\Projects\Programming\AS3 и Flash\Тренировки\FlashED\src\system\Window.as:17] at system::Window$/init()[D:\Projects\Programming\AS3 и Flash\Тренировки\FlashED\src\system\Window.as:23] at Main()[D:\Projects\Programming\AS3 и Flash\Тренировки\FlashED\src\Main.as:13] at runtime::ContentPlayer/loadInitialContent() at runtime::ContentPlayer/playRawContent() at runtime::ContentPlayer/playContent() at runtime::AppRunner/run() at ADLAppEntry/run() at global/runtime::ADLEntry() |
|
|||||
|
Регистрация: Jun 2014
Сообщений: 558
|
package { import flash.display.Sprite; import system.Window; public class Main extends Sprite { private var _Window:Window = new Window(); public function Main() { addChild(_Window); } } } package system { import flash.display.Sprite; public class Window extends Sprite { private static var window:Window_mc; //тут мувик public function Window() { addEventListener(Event.ADDED_TO_STAGE, init); } public function init():void { removeEventListener(Event.ADDED_TO_STAGE, init); window = new Window_mc(); stage.addChild(window); //window.stage.stageWidth = 2000; } } } Добавлено через 1 минуту хотя всё равно бред, вы в итоге всё равно вызываете в классе самого себяже |
|
|||||
|
Регистрация: Feb 2014
Сообщений: 56
|
Фишка в том, чтобы использовать статические методы. А динамических может быть сколь угодно.
Например статический класс GUI создаёт элементы интерфейса. К ним у меня нет прямого доступа, статика всё делает через свои методы, следит за их количеством, свойствами и т.п. Очень удобно, использовал таким образом, упрощало всё, алгоритмическая инкапсуляция замечательная. Но вот, подобные мелочи, что описаны тут, слегка нервируют, заставляют искать видимые костыли. Пример и вопрос, заключаются в том, чтобы использовать именно статический метод, для работы внутри статики с динамическими методами, не открывая их для пользователя. Последний раз редактировалось Freeman; 19.09.2015 в 14:10. |
|
|||||
|
Почему бы не передать stage по ссылке например при создании окна. Либо сделать статическое свойство stage в классе Window и в начале программы задать ему значение:
Но вам нужно посмотреть в сторону шаблона "фабрика". Суть в том, чтобы статический метод, просто создавал и возвращал нужный вам объект, например: создатель окон public class WindowCreator { public static var stage:Stage; public static function createWindow():Window { // создаёте окно и всё что нужно, // можно даже использовать переданный stage (вдруг) var win:Window = new Window(); win.x = WindowCreator.stage + 400; return win; } } |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:51. |
|
|
« Предыдущая тема | Следующая тема » |
|
|