Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   почему loadBytes не работает в flash 11.5 ? (http://www.flasher.ru/forum/showthread.php?t=194082)

NoCD 07.02.2013 16:48

почему loadBytes не работает в flash 11.5 ?
 
Есть вот такой код:

Код AS3:

function loaders(ind)
        {
                //var path:String = arrList[ind].photo;
                result_tf.appendText("arrList["+ind+"].photo: " + arrList[ind].photo+"\r\n");
                        loader.load( new URLRequest(arrList[ind].photo) );                                       
                        //loader.contentLoaderInfo.addEventListener(Event.COMPLETE, handler_bytesComplete);
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, complete);
 
        }
 
function complete(e:Event):void
{        loader.loadBytes(loader.contentLoaderInfo.bytes);
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, handler_bytesComplete);
        loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, complete);
        trace("loadBytes загружен");
 
}
 
 
function handler_bytesComplete(event:Event):void
{        result_tf.appendText("handler_bytesComplete\r\n");
        //result_tf.appendText(loader.contentLoaderInfo.content + "\r\n");
        var source:DisplayObject = loader.contentLoaderInfo.content as DisplayObject;
        result_tf.appendText("2\r\n");
        var bitmapData:BitmapData = new BitmapData(source.width, source.height, true, 0x00000000);
        result_tf.appendText("3\r\n");
        var bitmap:Bitmap = new Bitmap(bitmapData);
        result_tf.appendText("4\r\n");
                bitmapData.draw(source);
                result_tf.appendText("5\r\n");
                stage.addChild( bitmap );
                result_tf.appendText("6\r\n");
                bitmap.x = bitmap.width * ind;
                loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, handler_bytesComplete);
 
 
                //if(ind < 5){ind++; loaders(ind);}
 
}
loaders(0);


Локально и вконтакте код работает во flash 10.3

Но вот вконтакте с flash 11.5 перестает работать.

Мне нужен мульти загрузчик фоток из контакта. Пытаюсь получить фото и записать его в bitmap. Что бы не плодить кучу обработчиков загрузки.

Подскажите, что я делаю не так? Что случилось с loadBytes? Event.COMPLETE для loadBytes не срабатывает.

AlexCooper 07.02.2013 17:30

А ведь есть уже давно придуманные велосипеды. Посмотрите BulkLoader - он вам все загрузит, + парсит xml, json, etc...

Добавлено через 3 минуты
а так должны быть вкурсе что с выходом 11.4 плеера поапдейтили безопасность.
Код AS3:

loader.load( new URLRequest(arrList[ind].photo,new LoaderContext(true));

Добавлено через 5 минут
так же врятли у вас получиться достучаться до БайтАрея картинки
Код AS3:

package src {
 
        import flash.display.Loader;
        import flash.display.LoaderInfo;
        import flash.events.Event;
        import flash.utils.ByteArray;
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.net.URLRequest;
        import flash.display.Sprite;
        import flash.events.SecurityErrorEvent;
        import flash.events.IOErrorEvent;
        import flash.system.LoaderContext;
 
        public class loadPictures extends Sprite {
 
                public var bitmap:Bitmap;
                private var aurl:String = "";
 
                public function loadPictures($url):void {
                        loading($url);
                }
 
                private function loading($url):void {
 
                        bitmap = new Bitmap();
 
                        var req:URLRequest = new URLRequest($url);
                        var _picLoader:Loader = new Loader();
                                _picLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,loader2ByteArray);
                                _picLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
                                _picLoader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
                                _picLoader.load(req, new LoaderContext(true));
                }
 
                private function securityErrorHandler(e:SecurityErrorEvent):void {
                        trace("security error");
                        loading(aurl);
                }
 
                private function errorHandler(info:IOErrorEvent):void {
                        loading(aurl);
 
                }
 
                private function loader2ByteArray(evt:Event):void {
                        evt.target.content.smoothing = true;
                        addChild(evt.target.content);
 
                        dispatchEvent(new Event("LOAD_COMPLETE"));
 
        /* Не получиться
                        var lInfo:LoaderInfo = LoaderInfo(evt.target);
                        var ba:ByteArray = lInfo.bytes;
 
                        reloadByteArray(ba);*/

                }
 
                private function reloadByteArray(ba:ByteArray):void {
 
                        var reloader:Loader = new Loader();
                                reloader.loadBytes(ba);
 
                                reloader.contentLoaderInfo.addEventListener(Event.COMPLETE, reloaderComplete);
                }
 
                private function reloaderComplete(evt:Event):void {
 
                        var imageInfo:LoaderInfo = LoaderInfo(evt.target);
 
                        var bmd:BitmapData = new BitmapData(imageInfo.width,imageInfo.height);
 
                                bmd.draw(imageInfo.loader);
 
                        bitmap = new Bitmap(bmd);
                        bitmap.smoothing = true;
                        addChild(bitmap);
 
                        dispatchEvent(new Event("LOAD_COMPLETE"));
                }
        }
}

Код AS3:

addChild(new loadPictures(url_pic));


NoCD 07.02.2013 23:39

о, спасибо большое, надо будет применить

NoCD 11.02.2013 08:16

BulkLoader так же не решает вопрос с загрузкой фото вконтакте. Локально все работает.

Подскажите решение какое нибудь с загрузчиком.

KumoKairo 11.02.2013 08:33

NoCD вконтакте для загрузок с помощью любых лоадеров (URLLoader и прочие) нужен файл политики безопасности cross-domain.xml. Дело тут не в версии плеера, а в нарушении изолированной среды. Решение - создать корректный cross-domain.xml и кормить его плееру с помощью
Код AS3:

Security.loadPolicyFile(...);


NoCD 11.02.2013 11:57

Цитата:

Сообщение от KumoKairo (Сообщение 1120156)
NoCD вконтакте для загрузок с помощью любых лоадеров (URLLoader и прочие) нужен файл политики безопасности cross-domain.xml. Дело тут не в версии плеера, а в нарушении изолированной среды. Решение - создать корректный cross-domain.xml и кормить его плееру с помощью
Код AS3:

Security.loadPolicyFile(...);


Хорошо, а где мне этот файл хранить? У себя на сервере?

Если бы дело было только в нем, тогда и я бы не видел фоток, которые тянутся с контакта

KumoKairo 11.02.2013 12:29

То есть фото скачиваются и смотрятся?

Файл можно хранить на полиси сервере и отправлять строкой обратно по реквесту, а можно отдельным файлом. Вторым способом не пробовал, консультировать могу только по первому)

NoCD 11.02.2013 14:12

мне их не качать надо.
Суть в следующем:

1. через getProfile получаю информацию о пользователе, в том числе и ссылку на фото пользователя.
2. Через BulkLoader подсовываю ссылку на фото.
3. У меня как у разработчика и еще у пару людей отображаются фотки, а у других нет.

Даже одну пытаюсь отобразить, напрямую подставляя ссылку, не работает у некоторых людей.

4.

KumoKairo 11.02.2013 14:26

По опыту, фотки из контакта можно грузить двумя способами:
1. Использовать html текст внутри флешевского TextField
2. Использовать загрузчики, которые грузят фотку во флешку, и потом работают с ней как с полноценным Bitmap

C BulkLoader не работал, но могу предположить, что там используется второй способ, то есть обычный URLLoader с URLRequest'ом

Но если у вас грузятся одни фотки и не грузятся другие, значит проблема, скорее всего, в АПИ запросе вк. Скорее всего, для корректного завершения АПИ запроса вк, у участника должно быть установлено приложение.
Так же стоит отметить, что для некоторых АПИ запросов, приложение должно быть включено.

NoCD 11.02.2013 14:42

1. приложение включено
2. Не обязательно устанавливать приложение, что бы получить доступ к фоткам, достаточно разрешения пользователя.
3. Друзья, открывшие мое приложение, видят фотки друзей, следовательно, запрос проходит правильно.
Другие друзья не могут увидеть, но запрос все равно проходит, потому что я реально вижу массив ответа.

4. Если я использую loader.load( new URLRequest('ссылка' ); без loadBytes, то фотка начинает грузиться у всех, следовательно не проходят байты.

Помогите пожалуйста решить хотя бы вот такой вопрос:

Мне надо загрузить n-е количество фоток. Ну пусть будут минимум 5. Если я буду использовать один "loader", то фотка отобразится только на последней загрузке?
Как сделать так, что бы загруженные фотки не пропадали, не затирались?


Часовой пояс GMT +4, время: 15:46.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.