Показать сообщение отдельно
Старый 28.10.2013, 16:26
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 3  
Ответить с цитированием
Akopalipsis
Banned

Регистрация: Mar 2013
Сообщений: 1,864
Сделал пока вот как, если у такого подхода есть какие то недостатки по сравнению с другим ( который я не знаю ), то то поделитесь пожалуйста им.
Код AS3:
package 
{
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	public class Main extends Sprite
	{
		private var _timerFrame:TimerFrame;
		private var _animator:Animator;
		private var _boll:Boll;
		private var _convas:Convas;
		public function Main() 
		{
			init();
		}
		private function init(event:Event=null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			stage.addEventListener(MouseEvent.MOUSE_DOWN, stage_mouseDownHandler);
			stage.addEventListener(MouseEvent.MOUSE_UP, stage_mouseUpHandler);
 
			_timerFrame = new TimerFrame();
 
			_boll = new Boll();
			_animator = new Animator(_boll);
			_animator.startX = 50;
			_animator.startY = 200;
 
			_convas = new Convas();
			super.addChild(_convas);
			_animator.doc = _convas;
		}
 
		private function stage_mouseUpHandler(event:MouseEvent):void 
		{
			_timerFrame.removeAnimator(_animator);
		}
 
		private function stage_mouseDownHandler(event:MouseEvent):void 
		{
			_timerFrame.addAnimators(_animator);
		}
	}
}
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class Boll extends Sprite
	{
 
		public function Boll() 
		{
			super.addEventListener(Event.ADDED_TO_STAGE, super_addedToStageHandler);
		}
 
		private function super_addedToStageHandler(event:Event):void 
		{
			super.removeEventListener(Event.ADDED_TO_STAGE, super_addedToStageHandler);
 
			super.graphics.beginFill(0x2B81AE);
			super.graphics.drawCircle(0, 0, 40);
			super.graphics.endFill();
		}
		override public function get x():Number {return super.x ;}
		override public function set x(value:Number):void { super.x = value; }
 
		override public function get y():Number {return super.y;}
		override public function set y(value:Number):void {super.y = value;}
 
	}
 
}
Код AS3:
package 
{
	import flash.display.DisplayObject;
	import flash.display.DisplayObjectContainer;
	import flash.display.Sprite;
	import flash.errors.IllegalOperationError;
	public class Animator extends Object implements IAnimator
	{
		private var _boll:DisplayObject;
 
		private var _doc:DisplayObjectContainer;
 
		private var _startX:int;
		private var _startY:int;
 
		private var _finishX:int;
		private var _finishY:int;
 
		private var _elapsedTime:Number;
 
		public function Animator(boll:DisplayObject) 
		{
			_boll = boll as DisplayObject;
		}
		private function addCanvas():void 
		{
			_boll.x = _startX;
			_boll.y = _startY;
			_doc.addChild(_boll as DisplayObject);
		}
 
		public function animation(time:Number):void
		{
			trace('animator');
		}
		public function set startX(value:int):void {_startX = value;}
		public function set startY(value:int):void {_startY = value;}
 
		public function set finishX(value:int):void {_finishX = value;}
		public function set finishY(value:int):void {_finishY = value;}
 
		public function set doc(value:DisplayObjectContainer):void 
		{
			if (!value) throw new IllegalOperationError("");
			_doc = value;
			this.addCanvas();
		}
 
		public function set elapsedTime(value:Number):void 
		{
			_elapsedTime = value;
		}
 
	}
 
}
Код AS3:
package  
{
	import flash.display.Sprite;
	import flash.events.Event;
	public class Convas extends Sprite
	{
 
		public function Convas() 
		{
			super.addEventListener(Event.ADDED_TO_STAGE, super_addedToStageHandler);
		}
 
		private function super_addedToStageHandler(event:Event):void 
		{
			super.removeEventListener(Event.ADDED_TO_STAGE, super_addedToStageHandler);
 
		}
 
	}
 
}
Код AS3:
package 
{
 
	public interface IAnimator 
	{
		function animation(time:Number):void;
	}
 
}
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.DataEvent;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	public class TimerFrame extends Sprite
	{
		private var _elapsedTime:Number;
		private var _animators:Vector.<IAnimator>;
 
		public function TimerFrame() 
		{
			_animators = new Vector.<IAnimator>([]);
			addEventListener(Event.ENTER_FRAME, super_enterFrameHandler);
		}
 
		private function super_enterFrameHandler(event:Event):void 
		{
			var num:Number = 5;
			var length:int = _animators.length;
			for (var i:int = 0; i < length; i++) 
			{
				_animators[i].animation(num);
			}
		}
		public function addAnimators(animator:IAnimator):void
		{
			_animators.push(animator);
		}
		public function removeAnimator(animator:IAnimator):void
		{
			var length:int = _animators.length;
			for (var i:int = 0; i < length; i++) 
			{
				if (_animators[i] == animator)
				{
					_animators.splice(i, 1);
					break;
				}
			}
		}
 
	}
 
}
И прежде чем я начну делать класс дляентерФрайм + гетТаймер, хочу вот что уточнить.
Какую связку нужно или лучше делать - ентерФрайм + гетТаймер или таймер + гетТаймер?