Показать сообщение отдельно
Старый 11.12.2009, 16:59
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Набросал тут классик)
Код AS1/AS2:
package  
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.events.TimerEvent;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	import flash.utils.Timer;
	/**
	 * ...
	 * @author wolsh
	 */
	public class FilmViewer extends Bitmap
	{
		private var _film:BitmapData;
		private var _frameRect:Rectangle;
		private var _fps:uint;
		private var _width:Number;
		private var _height:Number;
		private var _timer:Timer;
		private var _loop:uint;
		private var _loopCount:uint = 0;
		private var _position:Number;
		private var _frame:uint = 0;
 
		public function FilmViewer(screenWidth:Number, screenHeight:Number) 
		{
			_width = screenWidth;
			_height = screenHeight;
			bitmapData = new BitmapData(_width, _height);
			super(bitmapData, "auto", true);
		}
		public function mount(film:BitmapData, cadrRect:Rectangle, fps:uint):void
		{
			_film = film;
			_frameRect = cadrRect;
			_fps = Math.round(1000/fps); 
			bitmapData.copyPixels(_film, _frameRect, new Point());
		}
		public function demount():void
		{
			_timer.stop();
			_timer = null;
			_film = null, _frameRect = null, _fps = 0;
			bitmapData.dispose();
			_frame = 0;
			_loopCount = 0;
		}
		public function play(loop:uint = 1):void
		{
			_loop = loop;
			_loopCount = 0;
			_position = _frameRect.x;
			_timer = new Timer(_fps);
			_timer.addEventListener(TimerEvent.TIMER, viewNextFrame);
			_timer.start();
		}
		public function stop():void
		{
			_timer.stop();
		}
		public function get currentFrame():uint
		{
			return _frame;
		}
		private function viewNextFrame(event:TimerEvent):void
		{
			if (_loopCount < _loop || _loop == 0)
			{
				var cadr:Rectangle = new Rectangle(_position, _frameRect.y, _frameRect.width, _frameRect.height);
				bitmapData.copyPixels(_film, cadr, new Point());
				_position += _frameRect.width;
				_frame += 1;
				if (_position > _film.width - _frameRect.width)
				{
					_position = _frameRect.x;
					_loopCount += 1;
					_frame = 0;
				}
			}
		}
 
	}
}
Создаете экземпляр FilmViewer, монтируете вашу битмапДату, задаете размер кадра и отступы (Rectangle), фпс, и вперед - плей. Количество лупов указываете обязательно, если бесконечно - 0.
пример
Код AS1/AS2:
var projector:FilmViewer = new FilmViewer(122, 122);
addChild(projector);
projector.x = projector.y = 50;
var cadr:Rectangle = new Rectangle(0, 0, 122, 122);
var moveData:BitmapData = (new moveFilm() as Bitmap).bitmapData;
projector.mount(moveData, cadr, 12);
projector.rotation = 25;
projector.scaleX = projector.scaleY = 1.5;
projector.play(5);
__________________
Reality.getBounds(this);