|
|
|||||
Добавить экземпляр класса в Main
Ух, осуществилась мечта, начал изучать AS3... Идея проста - перенести свою игру-сайт во флеш... И, так сказать, уже появились проблемы... Изначально был такой вариант:
Вот класс Main: package { import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; import flash.text.TextField; import vk.APIConnection; import vk.api.serialization.json.JSON; /** * ... * @author Volodin Alexandr Sergeevich */ public class Main extends Sprite { public function Main() { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } public var flashVars:Object = stage.loaderInfo.parameters as Object; public var VKAPI:APIConnection = new APIConnection(flashVars); public static var avatar:String = new String; private var txt:TextField; private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point txt = new TextField(); txt.width = 800; txt.height = 600; txt.wordWrap = true; txt.appendText("> flashVars: " + JSON.encode(flashVars) + "\n\n"); addChild(txt); VKAPI.api( "users.get", { user_ids:flashVars['viewer_id'], fields:"photo_50", name_case:"nom" }, usersGetSuccess, usersGetError ); } public function usersGetSuccess(data:Object):void { txt.appendText("> usersGet: " + JSON.encode(data) + "\n\n"); avatar = data[0].photo_50; txt.appendText("> avatar: " + avatar + "\n\n"); var loader:Loader = new Loader(); loader.load(new URLRequest(avatar)); loader.x = 100; loader.y = 100; addChild(loader); } public function usersGetError(data:Object):void { txt.appendText("> usersGet: error: " + JSON.encode(data) + "\n\n"); } } } То есть, всё работает. Теперь, я немного преобразую и создам класс Profile, куда помещу весь код из Main. Класс Main: package { import flash.display.Sprite; import flash.events.Event; /* import flash.display.Loader; import flash.net.URLRequest; import flash.text.TextField; import vk.APIConnection; import vk.api.serialization.json.JSON; */ /** * ... * @author Volodin Alexandr Sergeevich */ public class Main extends Sprite { public function Main() { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } /* public var flashVars:Object = stage.loaderInfo.parameters as Object; public var VKAPI:APIConnection = new APIConnection(flashVars); public static var avatar:String = new String; private var txt:TextField; */ private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point addChild(new Profile); // добавил класс в Main /* txt = new TextField(); txt.width = 800; txt.height = 600; txt.wordWrap = true; txt.appendText("> flashVars: " + JSON.encode(flashVars) + "\n\n"); addChild(txt); VKAPI.api( "users.get", { user_ids:flashVars['viewer_id'], fields:"photo_50", name_case:"nom" }, usersGetSuccess, usersGetError ); */ } /* public function usersGetSuccess(data:Object):void { txt.appendText("> usersGet: " + JSON.encode(data) + "\n\n"); avatar = data[0].photo_50; txt.appendText("> avatar: " + avatar + "\n\n"); var loader:Loader = new Loader(); loader.load(new URLRequest(avatar)); loader.x = 100; loader.y = 100; addChild(loader); } public function usersGetError(data:Object):void { txt.appendText("> usersGet: error: " + JSON.encode(data) + "\n\n"); } */ } } package { import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; import flash.text.TextField; import vk.APIConnection; import vk.api.serialization.json.JSON; /** * ... * @author Volodin Alexandr Sergeevich */ public class Profile extends Sprite { public var flashVars:Object = stage.loaderInfo.parameters as Object; public var VKAPI:APIConnection = new APIConnection(flashVars); public static var avatar:String = new String; private var txt:TextField; public function Profile() { txt = new TextField(); txt.width = 800; txt.height = 600; txt.wordWrap = true; txt.appendText("> flashVars: " + JSON.encode(flashVars) + "\n\n"); addChild(txt); VKAPI.api( "users.get", { user_ids:flashVars['viewer_id'], fields:"photo_50", name_case:"nom" }, usersGetSuccess, usersGetError ); } public function usersGetSuccess(data:Object):void { txt.appendText("> usersGet: " + JSON.encode(data) + "\n\n"); avatar = data[0].photo_50; txt.appendText("> avatar: " + avatar + "\n\n"); var loader:Loader = new Loader(); loader.load(new URLRequest(avatar)); loader.x = 100; loader.y = 100; addChild(loader); } public function usersGetError(data:Object):void { txt.appendText("> usersGet: error: " + JSON.encode(data) + "\n\n"); } } } Что не так делаю?
__________________
Надо сменить подпись... |
|
|||||
Регистрация: Dec 2014
Сообщений: 312
|
Пока вы не добавили объект на экран, его свойство stage равно null.
|
|
|||||
Регистрация: Dec 2014
Сообщений: 312
|
У вас addChild() выполняется после создания объекта.
Строчка stage.loaderInfo.parameters выполняется до addChild(). |
|
|||||
То есть, сначала нужно добавить через addChild что-то на сцену, а потом заполнять его или что?
Добавлено через 54 секунды Просто хочу понять, как правильно добавить экземпляр на сцену. Добавлено через 3 минуты Таким макаром не получилось..
__________________
Надо сменить подпись... |
|
|||||
Регистрация: Dec 2014
Сообщений: 312
|
package { import flash.display.Sprite; import flash.events.Event; /* import flash.display.Loader; import flash.net.URLRequest; import flash.text.TextField; import vk.APIConnection; import vk.api.serialization.json.JSON; */ /** * ... * @author Volodin Alexandr Sergeevich */ public class Main extends Sprite { public function Main() { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } /* public var flashVars:Object = stage.loaderInfo.parameters as Object; public var VKAPI:APIConnection = new APIConnection(flashVars); public static var avatar:String = new String; private var txt:TextField; */ private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point addChild(new Profile); // добавил класс в Main /* txt = new TextField(); txt.width = 800; txt.height = 600; txt.wordWrap = true; txt.appendText("> flashVars: " + JSON.encode(flashVars) + "\n\n"); addChild(txt); VKAPI.api( "users.get", { user_ids:flashVars['viewer_id'], fields:"photo_50", name_case:"nom" }, usersGetSuccess, usersGetError ); */ } /* public function usersGetSuccess(data:Object):void { txt.appendText("> usersGet: " + JSON.encode(data) + "\n\n"); avatar = data[0].photo_50; txt.appendText("> avatar: " + avatar + "\n\n"); var loader:Loader = new Loader(); loader.load(new URLRequest(avatar)); loader.x = 100; loader.y = 100; addChild(loader); } public function usersGetError(data:Object):void { txt.appendText("> usersGet: error: " + JSON.encode(data) + "\n\n"); } */ } } package { import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; import flash.text.TextField; import vk.APIConnection; import vk.api.serialization.json.JSON; /** * ... * @author Volodin Alexandr Sergeevich */ public class Profile extends Sprite { public var flashVars:Object; public var VKAPI:APIConnection; public static var avatar:String = new String; private var txt:TextField; public function Profile() { txt = new TextField(); txt.width = 800; txt.height = 600; txt.wordWrap = true; addChild(txt); addEventListener(Event.ADDED_TO_STAGE, addedToStage); } private function addedToStage(e:Event):void { flashVars = stage.loaderInfo.parameters as Object; VKAPI = new APIConnection(flashVars); txt.appendText("> flashVars: " + JSON.encode(flashVars) + "\n\n"); VKAPI.api( "users.get", { user_ids:flashVars['viewer_id'], fields:"photo_50", name_case:"nom" }, usersGetSuccess, usersGetError ); } public function usersGetSuccess(data:Object):void { txt.appendText("> usersGet: " + JSON.encode(data) + "\n\n"); avatar = data[0].photo_50; txt.appendText("> avatar: " + avatar + "\n\n"); var loader:Loader = new Loader(); loader.load(new URLRequest(avatar)); loader.x = 100; loader.y = 100; addChild(loader); } public function usersGetError(data:Object):void { txt.appendText("> usersGet: error: " + JSON.encode(data) + "\n\n"); } } } Напишите к каким выводам пришли после прочтения моего кода. |
|
|||||
надо же.. получилось... А что вообще произошло, если не секрет? Что не так было?
Добавлено через 3 минуты Я так понял, если надо что-то добавить на сцену, надо это инициировать через ADDED_TO_STAGE? Добавлено через 5 минут А нееееееет... Просто добавилось раньше, чем отправился запрос... Поэтому данных не было, хотя само тектовое поле было. Правильно?
__________________
Надо сменить подпись... |
|
|||||
А такой вопрос: как мне получить доступ к stage.height? опять нужно что-то инициировать или если произошло инициирование, то уже доступен этот параметр?
Добавлено через 1 минуту и да, допустим я создал экземпляр Profile. Допустим, я вывожу не только фото, но и данные игры (сколько очков, уровень и т.д.) и мне надо обновить эти данные. каким способом мне лучше всего пересоздать экземпляр, если один уже есть?
__________________
Надо сменить подпись... |
|
|||||
Регистрация: Jun 2014
Сообщений: 558
|
постараюсь на пальцах
ADDED_TO_STAGE - просто слушатель события, который срабатывает, когда появился доступ к stage когда вы пишите то выполняется код в классе, но если вы что-то в этом классе добавляете на сцену, то это не произойдёт, т.к. ссылки на stage нету что бы класс получил ссылку на stage, то нужно написать, после инициализации, addChild(Ваш класс) по этому используется слушатель ADDED_TO_STAGE, выполниться весь код, кроме того, что вызовет этот слушатель, а когда вы добавите ваш класс на сцену, то выполниться остальная часть, в ней как раз и стоит что либо добавлять на сцену, можно конечно обойти(передать ссылку на stage при вызове класса), но не стоит писать такой код |
Часовой пояс GMT +4, время: 16:32. |
|
« Предыдущая тема | Следующая тема » |
|
|