private var flashVars: Object = stage.loaderInfo.parameters

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в Flash-приложениях (ActionScript)
Ответить
Lampy
Сообщения: 48
Зарегистрирован: 21 ноя 2012, 14:09

private var flashVars: Object = stage.loaderInfo.parameters

Сообщение Lampy »

Всем привет. Пытаюсь подгрузить 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

Re: private var flashVars: Object = stage.loaderInfo.parameters

Сообщение alexandr_ratush »

Привет!
Не нужно инициализировать переменные 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

Re: private var flashVars: Object = stage.loaderInfo.parameters

Сообщение Lampy »

возникает другая проблема. При использовании кода

Код: Выделить всё

private function onCompi (e:Event):void {            init(); }
или

Код: Выделить всё

private function onCompliteLoader (e:Event) :void {             Main(parent).init();}
Пропадает аватарка и появляется, только после обновления всего приложения.
Аватара пользователя
alexandr_ratush
Сообщения: 94
Зарегистрирован: 05 мар 2014, 21:47

Re: private var flashVars: Object = stage.loaderInfo.parameters

Сообщение alexandr_ratush »

А что за onCompi? Где происходит вызов, и что это должно быть?
Lampy
Сообщения: 48
Зарегистрирован: 21 ноя 2012, 14:09

Re: private var flashVars: Object = stage.loaderInfo.parameters

Сообщение Lampy »

после успешной оплаты

Код: Выделить всё

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

Re: private var flashVars: Object = stage.loaderInfo.parameters

Сообщение Lampy »

Получается, что при использовании

Код: Выделить всё

    private function onCompliteLoader (e:Event) :void {                 Main(parent).init();}
повторно не вызывается функция с отображением onProfileLoaded

Код: Выделить всё

VK.api ('users.get', { user_ids: flashVars['viewer_id'],fields:'photo_100' }, onProfileLoaded, onError);
вот и как быть
Аватара пользователя
alexandr_ratush
Сообщения: 94
Зарегистрирован: 05 мар 2014, 21:47

Re: private var flashVars: Object = stage.loaderInfo.parameters

Сообщение alexandr_ratush »

А вы уверены что у вас срабатывает событие onCompliteLoader.
Lampy
Сообщения: 48
Зарегистрирован: 21 ноя 2012, 14:09

Re: private var flashVars: Object = stage.loaderInfo.parameters

Сообщение Lampy »

Да. Мало того, если переменные объявить так

Код: Выделить всё

     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);
и аватарка банально не отображается
Ответить