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

Регистрация: Mar 2013
Сообщений: 1,864
Rivexe я опять внимания не обратил))) Спасибо!
Не знаю на сколько правильно ( очень надеюсь , что правильность прокомментируют ) но работает.
Код AS3:
package 
{
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;
 
	public class Drag extends Sprite 
	{
		private var _container:Sprite;
 
		private var _spriteArray:Vector.<Sprite>;
 
		private var _conteinersArray:Vector.<Sprite>;
 
		private var _distantion:Point;
		private var _target:Sprite;
 
		private var _maxX:int;
		private var _maxY:int;
		private var _minX:int;
		private var _minY:int;
 
		public function Drag() 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(event:Event=null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			_conteinersArray = Vector.<Sprite>([]);
 
			this.addEventListener(MouseEvent.MOUSE_DOWN, this_mouseDownHandler);
			_container = new Sprite();
			_conteinersArray.push(_container);
			super.addChild(_container);
			var circle:Sprite;
			_spriteArray = Vector.<Sprite>([]);
 
 
			for (var i:int = 0; i < 10; i++) 
			{
				circle = new Sprite();
				circle.graphics.beginFill(Math.random() * 0xf6f6f6);
				circle.graphics.drawCircle(Math.random() * stage.stageWidth, Math.random() * stage.stageHeight, 30);
				circle.graphics.endFill();
				_spriteArray.push(circle);
				_container.addChild(_spriteArray[i] as DisplayObject);
			}
 
			_maxX = this.width;
			_maxY = this.height;
 
			_minX = this.width - this.width;
			_minY = this.height - this.height;
 
		}
 
		private function this_mouseDownHandler(event:MouseEvent):void 
		{
			if (_conteinersArray.indexOf(event.target > 0))
			{
				this.addEventListener(MouseEvent.MOUSE_UP, this_mouseUpHandler);
				stage.addEventListener(MouseEvent.MOUSE_MOVE, this_mouseMoveHandler);
				_target = event.target.parent as Sprite;
				_distantion = new Point(event.localX, event.localY);
			}
		}
 
		private function this_mouseUpHandler(event:MouseEvent):void 
		{
			this.removeEventListener(MouseEvent.MOUSE_UP, this_mouseUpHandler);
			stage.removeEventListener(MouseEvent.MOUSE_MOVE, this_mouseMoveHandler);
		}
		private function this_mouseMoveHandler(event:MouseEvent):void 
		{
			if (mouseX > _maxX || mouseX < _minX || mouseY > _maxY || mouseY < _minY) 
			{
				stage.removeEventListener(MouseEvent.MOUSE_MOVE, this_mouseMoveHandler);
				this.removeEventListener(MouseEvent.MOUSE_UP, this_mouseUpHandler);
				_target = null;
				_distantion = null;
				return;
			}
			_target.x =  mouseX - _distantion.x;
			_target.y = mouseY - _distantion.y;
			event.updateAfterEvent();
		}
 
	}
 
}