Home > ActionScript 3.0 > Point.distance()を使ったドラッグアンドドロップテクニック[ActionScript 3.0]

Point.distance()を使ったドラッグアンドドロップテクニック[ActionScript 3.0]

smile.jpg

ActionScript3.0でドラッグの動作を実現させるためには、startDrag(),stopDrag()を使います。
単純なドラッグ処理でしたらこれだけでも十分なのですが、
ドラッグとクリックを分けたいという場合がでてきます。
こういう場合、Pointクラスのdistanceメソッドを使って判定処理を行うことで実現できます。

http://xingxx.com/sample/drag.html

流れとしては以下のような感じになります。

  1. マウスが押されたら座標を取得する
  2. マウスが押された状況でマウスを動かしているかをイベントでキャッチする
  3. 動いていたらドラッグの開始
  4. マウスが離されたら座標を取得
  5. 二つの座標を比べ、0だったらクリック処理、それ以外だったらドラッグの処理として判定する

ソースにすると以下のようになります。

package {
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.events.Event;
	import flash.geom.Point;
	/*ドラッグアンドドロップ*/
	public class Smile extends Sprite {
		
		private var savePointArray;
		private var pop:Pop;
		
		public function Smile():void{
			init();
			addEventListener(Event.ADDED_TO_STAGE,addedHandler)
		}
		//表示リストに追加イベント
		private function addedHandler(e:Event):void {
        	//表示をセンターに
			x = stage.stageWidth / 2;
			y = stage.stageHeight / 2;
		}
		
		private function init():void {
			createPoP();
			savePointArray = new Array();
			addEventListener(MouseEvent.MOUSE_DOWN, mosueDownHandler)
			addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler)
		}
		
        //マウスダウンイベント
		private function mosueDownHandler(e:MouseEvent):void {
        	//クリック位置のステージ座標でポイントを生成
			savePointArray[0] = new Point(e.stageX,e.stageY)
			addEventListener(MouseEvent.MOUSE_MOVE, mosueMoveHandler)
		}
		
        //マウスムーブイベント
		private function mosueMoveHandler(e:MouseEvent):void {
			pop.visible = false;
            //ドラッグの開始
			startDrag();
		}
		
        //マウスアップイベント
		private function mouseUpHandler(e:MouseEvent):void {
        	//マウスムーブイベントのリムーブ
			removeEventListener(MouseEvent.MOUSE_MOVE, mosueMoveHandler)
            //マウスが離されたステージ座標でポイントの生成
			savePointArray[1] = new Point(e.stageX, e.stageY)
            //生成されたポイント二つを比べる
			if (Point.distance(savePointArray[0], savePointArray[1])) {//0以外だったら
				stopDrag();//ドラッグの終了
			}else {//ドラッグされていない場合の処理
				pop.visible = true;
			}
		}
		
		private function createPoP():void{
			pop = new Pop();
			with (pop) {
				x = 150;
				y = -80;
				visible = false;
			}
			addChild(pop)
		}
		
	}
	
}

Summer Camp 2010 野中文雄のActionScript 3.0による 三次元表現

無料  ActionScript 3.0による 三次元表現 in アップルストア 銀座

フィジカルコンピューティング ラボラトリー

Home > ActionScript 3.0 > Point.distance()を使ったドラッグアンドドロップテクニック[ActionScript 3.0]

Search
Feeds
Tag Cloud

Return to page top