Created
May 27, 2012 15:57
-
-
Save tmshv/2814863 to your computer and use it in GitHub Desktop.
Draggable sprite
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package ru.gotoandstop.display { | |
import flash.display.DisplayObject; | |
import flash.display.Sprite; | |
import flash.events.Event; | |
import flash.events.IEventDispatcher; | |
import flash.events.MouseEvent; | |
[Event(name="change", type="flash.events.Event")] | |
/** | |
* @author Roman Timashev (roman@tmshv.ru) | |
*/ | |
public class DraggableSprite extends Sprite{ | |
private var mousePressed:Boolean; | |
private var _target:DisplayObject; | |
private var _stage:IEventDispatcher; | |
public function DraggableSprite() { | |
setDragTarget(this); | |
super.addEventListener(Event.ADDED_TO_STAGE, handleAddedToStage); | |
} | |
public function setDragTarget(target:DisplayObject):void { | |
if(_target) _target.removeEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown); | |
_target = target; | |
if(_target) _target.addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown); | |
} | |
public function dispose():void { | |
super.removeEventListener(Event.ADDED_TO_STAGE, handleAddedToStage); | |
super.removeEventListener(Event.REMOVED_FROM_STAGE, handleRemovedFromStage); | |
_target.removeEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown); | |
_stage.removeEventListener(MouseEvent.MOUSE_MOVE, handleMouseMove); | |
_stage.removeEventListener(MouseEvent.MOUSE_UP, handleMouseUp); | |
_stage = null; | |
_target = null; | |
} | |
private function handleAddedToStage(event:Event):void { | |
_stage = _target.stage; | |
super.removeEventListener(Event.ADDED_TO_STAGE, handleAddedToStage); | |
super.addEventListener(Event.REMOVED_FROM_STAGE,handleRemovedFromStage); | |
_stage.addEventListener(MouseEvent.MOUSE_MOVE, handleMouseMove); | |
_stage.addEventListener(MouseEvent.MOUSE_UP, handleMouseUp); | |
} | |
private function handleRemovedFromStage(event:Event):void { | |
super.addEventListener(Event.ADDED_TO_STAGE, handleAddedToStage); | |
super.removeEventListener(Event.REMOVED_FROM_STAGE, handleRemovedFromStage); | |
_target.removeEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown); | |
_stage.removeEventListener(MouseEvent.MOUSE_MOVE, handleMouseMove); | |
_stage.removeEventListener(MouseEvent.MOUSE_UP, handleMouseUp); | |
} | |
private function handleMouseDown(event:MouseEvent):void { | |
super.startDrag(); | |
mousePressed = true; | |
} | |
private function handleMouseUp(event:MouseEvent):void { | |
super.stopDrag(); | |
mousePressed = false; | |
} | |
protected function handleMouseMove(event:MouseEvent):void { | |
if (mousePressed) { | |
super.dispatchEvent(new Event(Event.CHANGE)); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment