Skip to content

Instantly share code, notes, and snippets.

@tmshv
Created May 27, 2012 15:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tmshv/2814863 to your computer and use it in GitHub Desktop.
Save tmshv/2814863 to your computer and use it in GitHub Desktop.
Draggable sprite
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