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

Регистрация: Mar 2013
Сообщений: 1,864
Вот почему при таком подходе, если быстро дергать мышкой, то драг срывается?
Код 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;
 
		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();
			_container.name = 'con';
			_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);
			}
		}
 
		private function this_mouseDownHandler(event:MouseEvent):void 
		{
			if (_conteinersArray.indexOf(event.target > 0))
			{
				trace('good');
				this.addEventListener(MouseEvent.MOUSE_UP, this_mouseUpHandler);
				this.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 
		{
			trace('up');
			this.removeEventListener(MouseEvent.MOUSE_UP, this_mouseUpHandler);
			this.removeEventListener(MouseEvent.MOUSE_MOVE, this_mouseMoveHandler);
			event.stopPropagation();
		}
		private function this_mouseMoveHandler(event:MouseEvent):void 
		{
			_target.x =  mouseX - _distantion.x;
			_target.y = mouseY - _distantion.y;
			event.updateAfterEvent();
		}
 
	}
 
}