Flash Player 10.1 の TouchEvent

Flash Player 10.1 から新しく TouchEvent が追加されました。これにより、指やスタイラスによるたタッチパネル操作をイベントとして扱えるようになっています。TouchEvent は MouseEvent と違い、複数の指 (タッチポイント) による操作を同時に追いかけることができます (マルチタッチのサポート)。前回まで説明した SWIPE、ZOOM 等のジェスチャーイベントは、複数の TouchEvent を 1 つにまとめて作られたものです。

TouchEvent を使うときは、Multitouch.inputmode に TOUCH_POINT を設定します。

Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT;
 
var mySprite:Sprite = new Sprite();
mySprite.graphics.beginFill(0xFF6600);
mySprite.graphics.drawRect(0, 0, 80, 80);
addChild(mySprite);
 
mySprite.addEventListener(TouchEvent.TOUCH_TAP, taphandler);
 
function taphandler(e:TouchEvent): void {
  trace("touchTap");
}
 

残念ながら、TouchEvent は今のところ Mac 上ではサポートされません。

タッチイベントの種類

TouchEvent クラスには以下の 8 つのイベントが定義されています。MouseEvent とはよく似た感じです。

TouchEvent.TOUCH_BEGIN
TouchEvent.TOUCH_END
TouchEvent.TOUCH_TAP
TouchEvent.TOUCH_MOVE
TouchEvent.TOUCH_ROLL_OVER
TouchEvent.TOUCH_ROLL_OUT
TouchEvent.TOUCH_OVER
TouchEvent.TOUCH_OUT
 

実際に TouchEvent と MouseEvent 比較してみると、上から 3 つのイベントについては、

  • TouchEvent.TOUCH_BEGIN - MouseEvent.MOUSE_DOWN
  • TouchEvent.TOUCH_END  - MouseEvent.MOUSE_UP
  • TouchEvent.TOUCH_TAP   - MouseEvent.CLICK

のように関連付けることができそうです。

また、下の 5 つについても、例えば

  • TouchEvent.TOUCH_OVER - MouseEvent.MOUSE_OVER

のように、そのまま置き換えることができそうです。

が、一般的に、"マウスオーバー" や "ロールオーバー" というと、マウスをクリックしていない状態でカーソルをオブジェクト上に乗せる操作を指すことが多いと思います。タッチパネルで同等の操作はできません。なので、TouchEvent にも Over や RollOver と呼ばれるイベントがあることにちょっと違和感を持つ人もいるかもしれません。

そのあたり、少し以下に続きます。

TouchEvent と Over/RollOver

最もシンプルなマウスでも 1 つはボタンが付いています。一方、タッチパネルにはホイールはもちろんボタン類は一切付いていません。この違いのため、マウスとタッチパネルの操作モデルはやや異なるものになります。例えば、マウスを使う場合は 「クリックする前にカーソルをオブジェクト上に移動してフィードバックを確認する」 という行為が可能ですが、タッチパネルでは触れずに操作することができないので 「とりあえずオブジェクト押してみる」 以外の選択肢がありません。

この違いをまとめてみると、

  1. マウスの場合、カーソルを移動する際
    1. ボタンをクリックしない状態での操作
    2. ボタンをクリックした状態での操作
    の 2 種類が可能 (ボタンがあるため)

  2. タッチパネルの場合、カーソル移動は
    1. パネルに触れた状態での操作
    の 1 種類しかない (触れていないと操作をすることができないため)

と書くことができそうです。このうち、1-1 の操作が一般的にマウスオーバーの言葉で指されるものかと思います。

(余談ですが、タッチ操作の場合マウスオーバーに相当する操作ができないので、より見た目だけで操作できることが分かりやすく、且つ操作後に起きることも予測しやすいデザインが必要そうです)

ところが、イベント処理の観点からは、このような違いはありません。マウスポインターを移動した場合に発生するイベントは、ボタンを押しているいないに依存しないからです。

例えば、カーソルをオブジェクト上に移動したときに発生するイベントは、

  1. マウスの場合 → mouseOver / rollOver
  2. タッチの場合 → touchOver / touchRollOver

となり、マウス操作の場合も一種類です。なのでカーソル移動により発生するイベントについても TouchEvent と MouseEvent を対応させてもよさそうです。

MouseEvent の場合、マウスのボタンが押されているかどうかは buttonDown 属性で判断できます。

トラックバック(0)

トラックバックURL: http://cuaoar.jp/mt4/mt-tb.cgi/59

コメントする

2014年1月

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
レンタルサーバー

月別 アーカイブ

Powered by Movable Type 4.261