|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
|
Остановка отображения в плеере во время загрузки файла.
Добрый вечер, колллеги!
Появилась тут такая проблема. Гружу совершенно обычным способом Loader'ом swf. Есть прелоадер, показывающий прогресс загруки. Все отлично в Chrome, FF, Opera, но вот в IE и standalone плеере наблюдаются странности, которым пока у меня нет объяснения, да и google ничего мне толком не сказал (не факт, что правильно спрашивал). Появилось все в рабочем проекте, но на тестовом проекте то же самое. Standalone, локальная загрузка: Swf грузится очень быстро, но по стрейсам видно, что не кидается событие Event.ENTER_FRAME, в то время как ProgressEvent.PROGRESS исправно кидается. В итоге загрузка идет своим ходом, но экран не обновляется и, соответственно, прелоадер никак не отображает процесс загрузки. Можно было бы подумать, что время загрузки настолько мало, что умещается в интервале между двумя обновлениями кадров, но (!) замеры этого времени говорят об обратном. До начала загрузки ENTER_FRAME есть, во время загрузки нет, после - опять есть. Все параметры прелоадера в это время так же благополучно меняются, но обновляется он только после полной загрузки файла уже на 100 процентах. В IE такое происходит как локально, так и при выкладывании в сеть. С одной особенностью - несколько раз за все время (2-3) (а swf метров 30 специально, чтобы процесс наглядно растянуть) может изменить прелоадер (например 4, 11 и 52%), в то же время по трейсам опять видно, что ENTER_FRAME вызвался так же пару раз с огромными временными задержками, потом же просто зависает до окончания загрузки. Тестировалось в плеерах версий 10.1.82.76 release и 10.1.85.3 debug. В инете нагуглил, что была проблема в IE6 и 7, что не кидалось событие Компилю с помощью flex SDK 3.2 или flex SDK 4.1 на всЯкий случай код тестовой загрузки: package { import flash.display.DisplayObject; import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.events.ProgressEvent; import flash.net.URLRequest; import flash.utils.setTimeout; /** * ... * @author Vitaly Basov */ public class Main extends Sprite { private var _loader:Loader; private var _preloader:ContentPreloader; private var _interval:int; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(event:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); _loader = new Loader(); _loader.contentLoaderInfo.addEventListener(Event.OPEN, loaderOpenHandler); _loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loaderProgressHandler); _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderCompleteHandler); _preloader = new ContentPreloader(); _preloader.x = 200; _preloader.y = 200; addChild(_preloader); addEventListener(Event.ENTER_FRAME, enterFrameHandler); //_interval = setTimeout(_loader.load, 3000, new URLRequest("example.swf")); _loader.load(new URLRequest("example.swf")); } private function enterFrameHandler(event:Event):void { trace("enter"); } private function loaderOpenHandler(event:Event):void { trace("open"); } private function loaderProgressHandler(event:ProgressEvent):void { trace("progress"); var progress:Number = Math.floor( (event.bytesLoaded / event.bytesTotal) * 100); _preloader.progress = progress; } private function loaderCompleteHandler(event:Event):void { trace("complete"); addChildAt( event.target.content as DisplayObject, 0); removeEventListener(Event.ENTER_FRAME, enterFrameHandler); } } } Последний раз редактировалось Hidest; 28.10.2010 в 20:43. |
Часовой пояс GMT +4, время: 16:26. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|