goです。
6月からActionScriptのプログラマとして、ウノウに参画することになりました。
エンジニアとして経験がまだまだ浅いので、リファレンスを片手に日々奮闘しております。
Flashを扱うエンジニアとして、ここではインタラクションに関わる小ネタをActionScriptで披露していこうかと考えています。
ということで、今回はマウスを使ったオブジェクトの移動のお話です。
以下の方針に従って、作業を進めていきます。
1、画面全体でMOUSE_DOWNとMOUSE_MOVEのイベント監視
2、MOUSE_DOWNのイベントが発生したときに、マウスの座標、移動対象のオブジェクトの座標を取得します。
3、MOUSE_MOVE時に、移動前のマウス位置と、移動後のマウス位置の差(つまり移動量)を取得します。
4、移動前の円の座標に移動量を加算して、移動後の円の位置を取得します。
以下、ソースコードと実行結果です。
package { import flash.display.Sprite; import flash.events.MouseEvent; public class ObjectMove extends Sprite { /*円を描画されるオブジェクト*/ private var childSprite:Sprite; /*マウスカーソルの位置*/ private var thisX:Number, thisY:Number; /*円オブジェクトの位置*/ private var circleX:Number, circleY:Number; public function ObjectMove() { /*円を描画するchildSprite(Sprite)を表示リストに追加する*/ childSprite = new Sprite(); childSprite.x = 60; childSprite.y = 60; addChild(childSprite); /*childSpriteに円を描画する*/ childSprite.graphics.beginFill(0x000000); childSprite.graphics.drawCircle(0, 0, 40); childSprite.graphics.endFill(); /*マウスダウン時のイベントハンドラーを設定*/ addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); /*マウスムーブ時のイベントハンドラーを設定*/ addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); } /*マウスダウン時にマウスの位置と、円の位置を取得する。*/ private function mouseDownHandler(event:MouseEvent):void{ thisX = this.mouseX; thisY = this.mouseY; circleX = childSprite.x; circleY = childSprite.y; } /*マウスが動いた時に、円を移動させる。*/ private function mouseMoveHandler(event:MouseEvent):void{ if(!event.buttonDown) return; childSprite.x = this.mouseX - thisX + circleX; childSprite.y = this.mouseY - thisY + circleY; } } }
MOUSE_MOVEイベント発生時にMOUSE_DOWNイベントが発生していない場合は、値を返すのがポイントです。
こうすることで、マウスカーソルが円の内側にある場合に限り円を移動することが出来ます。
簡単ですね!
次回は、もっといろんなモーションを加えていきたいと思います。
ではでは。