Показать сообщение отдельно
Старый 10.07.2013, 21:13
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 2  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Примерно так... Писал на скорую руку, но суть не в коде а в алгоритме.
Код AS3:
package  {
 
	import flash.display.Sprite;
	import flash.display.Bitmap;
	import flash.utils.setTimeout;
	import flash.geom.Point;
	import flash.events.MouseEvent;
 
 
	public class Mains extends Sprite {
 
		private var _viewer:Sprite = new Sprite();
 
		private var _bitmapArray:Vector.<Bitmap> = new Vector.<Bitmap>;
 
		private var _imageList:Array;
		private var _imageOffset:uint = 0;
 
		private var _offsetX:Number = 110;
		private var _offsetY:Number = 110;
 
		private var _showCount:uint = 3;
 
		public function Mains() {
 
			initface();
 
			init();
		}
 
		private function initface():void {
 
			var btnArr:Array = new Array('prev','next');
 
			var btn:Sprite;
 
			for each( var btn_name:String in btnArr ) {
 
				btn = new Sprite();
 
				btn.name = btn_name;
				btn.buttonMode = true;
 
				setGraf(btn);
 
				btn.x = numChildren*(btn.width+10);
 
				btn.addEventListener(MouseEvent.CLICK, mouseHandler);
 
				addChild(btn);
			}
		}
 
		private function setGraf(spr:Sprite):void {
			spr.graphics.beginFill(0x333333);
			spr.graphics.drawRect(0,0,20,20);
			spr.graphics.endFill();
		}
 
		private function mouseHandler(e:MouseEvent):void {
 
			var vecOff:Number = (e.target.name=='next') ? _showCount : -_showCount;
 
			_imageOffset += vecOff;
 
			if (_imageOffset<0) _imageOffset = 0;
 
			if (_imageOffset>=_bitmapArray.length) _imageOffset=_bitmapArray.length-1;
 
			showImage();
		}
 
		private function init():void {
 
			_viewer.y = .5*stage.stageHeight;
 
			addChild(_viewer);
 
			_imageList = new Config().getImageList();
 
			for each( var url:String in _imageList) new loadPictures(url, new Point(100,100) ).conteiner = _bitmapArray;
 
			loadHandler();
		}
 
		private function loadHandler():void {
 
			if (_imageList.length == _bitmapArray.length) 
				showImage();
			else
				setTimeout(loadHandler, 100 );
		}
 
		private function showImage():void {
 
			while ( _viewer.numChildren ) _viewer.removeChildAt(0);
 
 
			for ( var index:uint = _imageOffset; index < _imageOffset+_showCount; index ++ ) {
 
				if ( index >= _bitmapArray.length ) break;
 
				_bitmapArray[index].x = _viewer.numChildren*_offsetX;
 
				_viewer.addChild(_bitmapArray[index]);
			}
		}
	}
}
 
internal class Config {
 
	public function Config() {}
 
	public function getImageList():Array {
 
		return new Array('http://www.flasher.ru/forum/images/russian/flasher_logo_2013.gif',
						 'http://cs9329.vk.me/u968029/l_f7ac0439.png',
						 'http://img.nnm.uz/images/06jfj.jpg',
						 'http://www.flasher.ru/forum/images/russian/flasher_logo_2013.gif',
						 'http://www.flasher.ru/forum/images/russian/flasher_logo_2013.gif',
						 'http://cs9329.vk.me/u968029/l_f7ac0439.png',
						 'http://img.nnm.uz/images/06jfj.jpg');
	}
}
 
 
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.geom.Point;
 
internal class loadPictures extends Sprite {
 
	public var bitmap:Bitmap;
 
	public var conteiner:Vector.<Bitmap>;
 
	private var _maxSize:Point;
 
	public function loadPictures($url:String, maxSize:Point = null):void {
 
		if (maxSize) _maxSize = maxSize;
 
		bitmap = new Bitmap();
 
		var req:URLRequest = new URLRequest($url);
		var _picLoader:Loader = new Loader();
			_picLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,loader2ByteArray);
 
		_picLoader.load(req);
	}
 
	private function loader2ByteArray(evt:Event):void {
 
		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;
 
		if (_maxSize) {
			var k:Number = Math.min(_maxSize.x,_maxSize.y) / Math.max(bitmap.width,bitmap.height);
 
			bitmap.width *= k;
			bitmap.height *= k;
		}
 
		if (conteiner) conteiner.push(bitmap);
 
		dispatchEvent(new Event(Event.COMPLETE));
	}
}
__________________
return this...