Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.10.2010, 20:35
Hidest вне форума Посмотреть профиль Отправить личное сообщение для Hidest Найти все сообщения от Hidest
  № 1  
Ответить с цитированием
Hidest
 
Аватар для Hidest

Регистрация: 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, что не кидалось событие ProgressEvent.PROGRESS Event.COMPLETE, но у меня IE8, и такой проблемы нет... Вот думаю, что же все это может означать.

Компилю с помощью flex SDK 3.2 или flex SDK 4.1

на всЯкий случай код тестовой загрузки:

Код AS3:
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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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