【AS3】ドラッグ&ドロップと線を書くサンプル

| | トラックバック(0)

仕事でやることになったのでサンプルを作ってみました。

どうってことないサンプルですが、一応flaファイルもアップしておきます。

下記コードの一部です。
一見謎ですがこうすると素早くドラッグされても処理が遅れることなくしっかりマウスについてきてくれる設定です。

private function onMousemove(e:MouseEvent):void {
e.updateAfterEvent();
}

サンプル

四角いのはドラッグしてでっかい四角にドロップできます。外側だとドロップできません。
ペンのアイコンをクリックすると四角の範囲で線が書けます。

マレーヴィチやミロ見たいな絵が描けます(笑)

ソース

package  
{
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	import flash.display.Shape;
	import caurina.transitions.Tweener;
	
	public class DragAndDrop extends MovieClip{
	
		private var mc:*;
		
		private var x_old;
		private var y_old;
		private var m_on;
		private var g;
		private var shape;
		private var drawArea:DrawArea;
		
		public function DragAndDrop(){
			init();
			x_old= stage.mouseX;
			y_old= stage.mouseY;
			m_on= false;
		}
		
		private function init():void {
			box_mc.buttonMode = true;
			box_mc.addEventListener(MouseEvent.MOUSE_DOWN, boxStartDrag);
			pen_mc.addEventListener(MouseEvent.CLICK, penClickHandler);
			reset_mc.addEventListener(MouseEvent.CLICK, resetAll);
			reset_mc.buttonMode = true;
			pen_mc.buttonMode = true;
			drawArea = new DrawArea();
			addChild(drawArea);
		}
		
		private function boxStartDrag(e:MouseEvent):void {
			
			
			mc = new Box4();
			
			mc.x = stage.mouseX;
			mc.y = stage.mouseY;
			mc.startDrag();
			mc.alpha = 0.4;
			mc.buttonMode = true;
			drawArea.addChild(mc)
			mc.addEventListener(MouseEvent.MOUSE_UP, boxStopDrag);
			mc.addEventListener(MouseEvent.MOUSE_DOWN, mcStartDrag);
			mc.addEventListener(MouseEvent.MOUSE_MOVE, onMousemove);
			stage.removeEventListener(MouseEvent.MOUSE_DOWN,function(){m_on = true;});
			stage.removeEventListener(MouseEvent.MOUSE_UP,function(){m_on = false;});
			area_mc.removeEventListener(MouseEvent.MOUSE_MOVE,drawLine)
		}
		
		private function onMousemove(e:MouseEvent):void {
			e.updateAfterEvent();
		}
		
		private function boxStopDrag(e:MouseEvent):void { 
			var m:* = e.currentTarget;
			e.currentTarget.stopDrag();
			if (e.currentTarget.hitTestObject(area_mc)) {
				e.currentTarget.alpha = 1;
				
				drawArea.addChild(m)
			}else {
				
				drawArea.removeChild(m)
			}
			m.dropHandler();
			m.addEventListener(MouseEvent.MOUSE_MOVE, onMousemove);
			
		}
		
		private function mcStartDrag(e:MouseEvent):void {
			var mc2:MovieClip = e.currentTarget as MovieClip;
			e.currentTarget.startDrag();
			e.currentTarget.alpha = 0.4;
			drawArea.addChild(mc2)
			mc.addEventListener(MouseEvent.MOUSE_MOVE,onMousemove);
		}
		
		private function getNum():int {
			var num:int = Math.random() * 3
			return num
		}
		
		private function penClickHandler(e:MouseEvent):void {
			shape= new Shape();
			drawArea.addChild(shape);
			g= shape.graphics;
			g.lineStyle (5, 0x000000, 100);	
			stage.addEventListener(MouseEvent.MOUSE_DOWN,function(){m_on = true;});
			stage.addEventListener(MouseEvent.MOUSE_UP,function(){m_on = false;});
			area_mc.addEventListener(MouseEvent.MOUSE_MOVE,drawLine)
		}
		
		private function drawLine(e:MouseEvent){
			if(m_on){
				g.moveTo (x_old, y_old);
				g.lineTo (stage.mouseX, stage.mouseY);
			}
			x_old = stage.mouseX;
			y_old = stage.mouseY;
			
			};
		
		private function resetAll(e:MouseEvent):void {
			removeChild(drawArea)
			drawArea = new DrawArea();
			addChild(drawArea);
		}
	}

}

トラックバック(0)

このブログ記事を参照しているブログ一覧: 【AS3】ドラッグ&ドロップと線を書くサンプル

このブログ記事に対するトラックバックURL: http://alwaysfinetuning.com/mt/mt-tb.cgi/85

このブログ記事について

このページは、が2009年10月23日 19:01に書いたブログ記事です。

ひとつ前のブログ記事は「[映画] DISTRICT 9」です。

次のブログ記事は「[AS3]IEでリロード時にStageのサイズの参照がでない。」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。