Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в Flash-приложениях (ActionScript)
Lampy
Сообщения: 48 Зарегистрирован: 21 ноя 2012, 14:09
Сообщение
Lampy » 07 июл 2014, 01:33
Всем привет. Пытаюсь подгрузить swf файл в другой, ругается на :
Код: Выделить всё
private var flashVars: Object = stage.loaderInfo.parameters ;private var VK:APIConnection = new APIConnection(flashVars);
Помогите, целый день убил, так и не смог разобраться. Код всего swf файла и лоадера :
Файл -
Код: Выделить всё
package { import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; import flash.text.TextField; import vk.APIConnection; /** * ... * @author Lampy */ public class Main extends Sprite { private var flashVars: Object = stage.loaderInfo.parameters ; private var VK:APIConnection = new APIConnection(flashVars); public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); VK.api ('users.get', { user_ids: flashVars['viewer_id'],fields:'photo_100' }, onProfileLoaded, onError);} private function onProfileLoaded(data:Object):void { // обрабатываем полученный ответ var result_tf:TextField = new TextField(); result_tf.text = data[0]['photo_100']; var loader:Loader = new Loader(); var url:URLRequest = new URLRequest(result_tf.text); loader.load(url); addChild(loader);} private function onError(data: Object):void { } }}
Лоадер -
Код: Выделить всё
var loader: Loader = new Loader();loader.load(new URLRequest("http://o.swf"));addChild(loader);
alexandr_ratush
Сообщения: 94 Зарегистрирован: 05 мар 2014, 21:47
Сообщение
alexandr_ratush » 07 июл 2014, 01:53
Привет!
Не нужно инициализировать переменные flashVars и VK сразу при их объявлении.
Потому что stage, из которого вы берете данные flashVars доступен не сразу, а только после добавления на сцену.
Вот так напишите:
Код: Выделить всё
private var flashVars:Object;private var VK:APIConnection;
и в слушателе
init уже делайте инициализацию этих переменных:
Код: Выделить всё
flashVars = stage.loaderInfo.parameters;VK = new APIConnection(flashVars);
P.S. Для локального запуска нужно делать проверку:
Код: Выделить всё
// Получаем данные. Если их нету, то подставляем свои для локального тестирования_flashVars = stage.loaderInfo.parameters as Object;if (!_flashVars.api_id){ _flashVars.api_id = '******'; _flashVars.viewer_id = '*******'; _flashVars.secret = '*************'; _flashVars.sid = '********************************'; _flashVars.api_url = 'http://api.vkontakte.ru/api.php';}
Lampy
Сообщения: 48 Зарегистрирован: 21 ноя 2012, 14:09
Сообщение
Lampy » 07 июл 2014, 10:24
возникает другая проблема. При использовании кода
Код: Выделить всё
private function onCompi (e:Event):void { init(); }
или
Код: Выделить всё
private function onCompliteLoader (e:Event) :void { Main(parent).init();}
Пропадает аватарка и появляется, только после обновления всего приложения.
Lampy
Сообщения: 48 Зарегистрирован: 21 ноя 2012, 14:09
Сообщение
Lampy » 07 июл 2014, 11:34
после успешной оплаты
Код: Выделить всё
private function onSuccessPay(data: Object):void { payText.text = "Голоса переведены"; var stat_loader:URLLoader = new URLLoader(); var stat_request:URLRequest=new URLRequest("http://.php");// заменяем на ссылку к вашему скрипту stat_request.method=URLRequestMethod.POST; // добавление параметров в запрос var stat_vars:URLVariables = new URLVariables(); stat_vars['auth_key'] = LoaderInfo(root.loaderInfo).parameters.auth_key;// auth_key из FlashVars stat_vars['viewer_id'] = LoaderInfo(root.loaderInfo).parameters.viewer_id;// ID просматривающего приложение stat_request.data=stat_vars; // выполнение запроса stat_loader.load(stat_request); stat_loader.addEventListener(Event.COMPLETE, onCompi); }
Lampy
Сообщения: 48 Зарегистрирован: 21 ноя 2012, 14:09
Сообщение
Lampy » 07 июл 2014, 11:54
Получается, что при использовании
Код: Выделить всё
private function onCompliteLoader (e:Event) :void { Main(parent).init();}
повторно не вызывается функция с отображением onProfileLoaded
Код: Выделить всё
VK.api ('users.get', { user_ids: flashVars['viewer_id'],fields:'photo_100' }, onProfileLoaded, onError);
вот и как быть
Lampy
Сообщения: 48 Зарегистрирован: 21 ноя 2012, 14:09
Сообщение
Lampy » 07 июл 2014, 12:41
Да. Мало того, если переменные объявить так
Код: Выделить всё
private var flashVars: Object = stage.loaderInfo.parameters ; private var VK:APIConnection = new APIConnection(flashVars);
то все нормально, только лоадер подключить нельзя. Если как вы сказали, повторно не вызывается onProfileLoaded
Код: Выделить всё
VK.api ('users.get', { user_ids: flashVars['viewer_id'],fields:'photo_100' }, onProfileLoaded, onError);
и аватарка банально не отображается