![]() |
|
||||||||||
|
|
|
|||||
|
Ух, осуществилась мечта, начал изучать 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. Допустим, я вывожу не только фото, но и данные игры (сколько очков, уровень и т.д.) и мне надо обновить эти данные. каким способом мне лучше всего пересоздать экземпляр, если один уже есть?
__________________
Надо сменить подпись... |
|
|||||
|
Цитата:
Свойство stage (с маленькой буквы), у спрайтов и т.д. - это просто ссылка на основную сцену Stage (с заглавной буквы). Так что если вы хотите обратиться к сцене из визуального объекта, то убедитесь, что его свойство stage не равняется null. Либо, как уже подсказали, передавать ссылку на сцену вручную. p.s. stage.height вернёт размер не флешки, а величину графического содержимого в данный момент на экране. А stage.stageHeigth - размер флешки. |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:35. |
|
|
« Предыдущая тема | Следующая тема » |
|
|