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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.05.2011, 16:27
elzone вне форума Посмотреть профиль Отправить личное сообщение для elzone Найти все сообщения от elzone
  № 1  
Ответить с цитированием
elzone
[+3 02.07.08]
 
Аватар для elzone

Регистрация: Sep 2004
Сообщений: 86
По умолчанию производительность приложения при работе с большими картинками

Здравствуйте
делаю сайт:
http://elzone.net/test/sites/inovatio/makarskaya/

наблюдаются тормоза при смене бэковых картинок (меняются alpha, scaleX, scaleY). этот бэк появляется после нажатия на enter site

может кто подскажет как решить проблему?


код который использую для прокрутки изображений

Код AS3:
public class PicBgRotator extends Sprite{
 
		public var _loaders:Array = [];
		private var _urls:Array = [];
		private var _loaded:Array = [];
		private var _index:uint = 0;
 
		private var _currentImage:Sprite;
		private var _prevImage:Sprite;
 
		private const _SCALE:Number = 1.07;
 
		private var _timeout:uint;
 
		private var _tw1:TweenLite;
		private var _tw2:TweenLite;
 
		private var _imageAlpha:Number;
		private var _updated:Boolean;
 
		private var _completlyLoaded:Boolean = false;
 
		private var _stopped:Boolean = false;
 
		public static var continueLoading:Boolean = true;
 
		public function PicBgRotator(xml:XMLList, autoRun:Boolean = true) {
			for each(var img in xml.item) {
				var l:Loader = new Loader();
				l.contentLoaderInfo.addEventListener(Event.COMPLETE, _onImageLoaded);
 
				_loaders.push(l);
				_urls.push(new URLRequest(img));
				_loaded.push(false);
			}
			if (autoRun)
				loadNextImage()
 
			addEventListener(Event.ADDED_TO_STAGE, _onAddedToStage);
 
		}
 
		public function loadNextImage():LoaderInfo {
 
			var info = _loaders[_index].contentLoaderInfo;
			_loaders[_index].load(_urls[_index]);
			_loaders[_index].contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,_onIOError);
 
			return info;
		}
 
		override public function set alpha(val:Number):void {
			super.alpha = val;
			if (!val && _prevImage && (_prevImage.parent == this))
				removeChild(_prevImage);
		}
 
		private function _onIOError(e:IOErrorEvent):void {
 
		}
 
		private function _onImageLoaded(e:Event):void {
 
			_loaded[_index] = true;
 
			if (stage)
				_addImage(_index);
 
			for (var i:uint = 0; i < _loaded.length; i++)
				if (!_loaded[i])
					return;
 
			_completlyLoaded = true;
		}
 
		private function _onAddedToStage(e:Event):void {
 
			removeEventListener(Event.ADDED_TO_STAGE, _onAddedToStage);
 
			if(_loaded[_index])
				_addImage(_index);
 
 
		}
 
		private function _addImage(i:uint):void {			
 
			if (_prevImage && (_prevImage.parent == this)) {
				removeChild(_prevImage);
				TweenLite.killTweensOf(_prevImage);
			}
 
			if (_currentImage)
				_prevImage = _currentImage;
 
			var img:Bitmap = _loaders[i].contentLoaderInfo.content;
 
			img.y = 0;
			img.smoothing = true;
 
			var sp:Sprite = new Sprite();
			sp.addChild(img);
 
			sp.y = 0;
 
			_currentImage=sp;
			addChild(_currentImage);
 
			_imageAlpha = 1;
			_updated = false;
 
			_imageAlpha = 1;
			_tw1=TweenLite.from(this, 4, { imageAlpha:0, ease:Linear.easeOut, delay:0.2, onComplete:_onTweenComplete} );
			if (_prevImage) {
				_tw2=TweenLite.from(_currentImage, 4, { scaleX:_SCALE, scaleY:_SCALE, ease:Linear.easeOut} );
			}
			_index = i + 1;
		}
 
		public function set imageAlpha(val:Number):void {
			_currentImage.alpha=val
		}
 
		public function get imageAlpha():Number {
			return _imageAlpha;
		}
 
		public function pause():void {
			_stopped = true;
		}
 
		public function resume():void {
			_stopped = false;
		}
 
		private function _handleEnterFrame(e:Event):void {
 
		}
 
		private function _onTweenProgress():void {
 
		}
 
		private function _onTweenComplete():void {
			_timeout = setTimeout(_nextImage, 7000);
		}
 
		private function _nextImage():void {
 
			clearTimeout(_timeout);
 
			if (!(continueLoading || _completlyLoaded) || _stopped) {
				_timeout = setTimeout(_nextImage, 5000);
				return;
			}
 
			var key:Boolean = true;
			var i:int = 0;
 
			while ((key = _loaded[i]) && (++i < _loaded.length) )
			trace(_loaded[i])
			if(!key)
				loadNextImage();
			else
				_addImage(_index %= _loaded.length);
		}		
	}

Старый 13.05.2011, 20:55
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 2  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 612
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
В данном случае большей производительности можно достигнуть используя фильтры и pixelBender. Пишите фильтр, который бы принимал две картинки, смещения и прозрачность одной из них. Туда же можно запихнуть и полоски идущие по всему экрану. Чем меньше операций по расчёту цвета и наложением прозрачных объектов, тем быстрее. Только вот помнится там было ограничение на размер картинки.


Последний раз редактировалось Rzer; 13.05.2011 в 20:57.
Старый 13.05.2011, 20:58
elzone вне форума Посмотреть профиль Отправить личное сообщение для elzone Найти все сообщения от elzone
  № 3  
Ответить с цитированием
elzone
[+3 02.07.08]
 
Аватар для elzone

Регистрация: Sep 2004
Сообщений: 86
to Rzer

а можно узнать какие именно фильтры?

Старый 13.05.2011, 20:59
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 4  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 612
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Самописный. С помощью http://www.adobe.com/devnet/pixelbender.html

Там внизу ссылки есть с примерами.

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:13.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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