Flash Player 10.1 から Sprite クラスに 2 つの新しいメソッドが追加されました。タッチ操作によるドラッグ機能を、Sprite (またはそのサブクラス) に提供するためのメソッドです。マウス操作に対する Sprite.startDrag() メソッドと Sprite.stopDrag() メソッドに相当します。
public function startTouchDrag(touchPointID:int, lockCenter:Boolean = false, bounds:Rectangle = null):void public function stopTouchDrag(touchPointID:int):void
Sprite.startDrag() や stopDrag() との違いは、最初の引数に touchPointID を必要とすることです。この値は TouchEvent の touchPointID 属性から取得できます。stopTouchDrag() でドラッグを中止するには、startTouchDrag() で指定した touchPointID と同じ値を指定します。
startTouchDrag() の残り 2 つの引数は startDrag() の引数と同じで、
- lockCenter: false の場合 Sprite 内の最初に触れた箇所が、true の場合 Sprite の基準点がドラッグする位置になる
- bounds: Rectangle を使って親オブジェクトの座標でドラッグできる領域を指定する
です。
startTouchDrag() でドラッグできる Sprite は同時に 1 つだけです。stopTouchDrag() が明示的に呼ばれるか、他の Sprite がドラッグ可能な状態になると、ドラッグ中の Sprite はドラッグできなくなります。
3D 回転ツールや Matrix3D を使った Sprite は、ドラッグするとその Sprite に定義されている 3D 空間内を移動します。また、2 次元の Sprite でも親オブジェクトが 3 次元オブジェクトの場合、親オブジェクトに定義されている 3D 空間内を移動します。
下は、Sprite.startDrag() と stopDrag() を使った簡単なサンプルです。タッチパネル上で円形のオブジェクトに触れるとそのまま 3 次元空間内をドラッグできます。
Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT; var mySprite:Sprite = new Sprite(); mySprite.graphics.beginFill(0xFFCC00); mySprite.graphics.drawCircle(50, 50, 40); // 3Dオブジェクトにしてから mySprite.z = 0; // 回転軸を設定する mySprite.transform.matrix3D.appendRotation(-5, Vector3D.X_AXIS); mySprite.transform.matrix3D.appendRotation(15, Vector3D.Y_AXIS); addChild(mySprite); // イベントハンドラの設定 mySprite.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin) mySprite.addEventListener(TouchEvent.TOUCH_END, onTouchEnd); function onTouchBegin(e:TouchEvent):void { mySprite.startTouchDrag(e.touchPointID); } function onTouchEnd(e:TouchEvent):void { mySprite.stopTouchDrag(e.touchPointID); }
コメントする