Flash Player 10.1 から新しく追加された Multitouch クラス関連のトピックです。
(Flash Lite 4 もマルチタッチをサポートします。今後搭載されるデバイスによっては、Flash Lite 4 を使ったマルチタッチアプリケーションを作ることが可能です。)
入力の指定
Flash でユーザ入力を処理する際はイベントを使うのが定番ですが、タッチやジェスチャーに関しても同様で、タッチイベントやジェスチャーイベントを使って、ユーザからの入力を処理します。
ところで、タッチイベントとジェスチャーイベントを同時に利用することはできません。どちらを使えるか (使うか) は Multitouch.inputMode 属性を使って確認/設定します。
(Multitouch クラスの属性は全て static です)
Multitouch.inputMode:String 利用する入力(イベント)の種類を設定
この属性に指定できる値は MultitouchInputMode クラスに定義されており、以下の 3 種類があります。
- MultitouchInputMode.GESTURE:
マルチタッチ操作をジェスチャーイベントとして受け取りたいときに指定します。ジェスチャーとして定義されていないタッチ操作はマウスイベントとして解釈されます。例えば、タップ操作をすると MouseEvent.CLICK イベントが発生します。
Multitouch.inputMode のデフォルト値は GESTURE です。 - MultitouchInputMode.TOUCH_POINT:
マルチタッチ操作をタッチイベントとして受け取りたいときに指定します。単純なタッチ操作のみで十分な場合、またはカスタムでマルチタッチのジェスチャーを実装したいときにお勧めです。このモードでもマウスイベントは発生します。 - MultitouchInputMode.NONE:
全てのタッチ操作がマウスイベントとして解釈されます。ジェスチャーイベントもタッチイベントも発生しません。タッチが利用できない環境とできる環境で同じコードを実行したい場合に向いています。マルチタッチが不要であれば (マウスイベントでは個々のタッチポイントを識別できないため) 1 本指で行えるジェスチャーを実装することは可能ですが、それが目的であれば GESTURE モードの方が便利かもです。
ということで、同じ操作の結果でも発生するイベントは複数の種類が想定されます。例えば、ユーザが、指を左から右に移動して MovieClip 上に動かしたとして、デバイスはその操作を mouseOver, touchOver, gesturePan のいずれにも解釈する可能性があります。その際 inputMode が GESTURE の時は mouseOver, gesturePan の両方が生成されるかもしれませんし、TOUCH_POINT の場合は mouseOver, touchOver の両方が生成されるかもしれません。
どのイベントを利用するかでユーザーに提供できる操作性がが影響を受ける可能性があります。マルチタッチを扱う際は、提供されるジェスチャーイベントだけで十分なのか、もし足りなければマルチタッチが必要なのかシングルタッチで十分なのか、ターゲットのプラットフォームは何で互換性はどうするか、などを最初によく考えておく必要がありそうです。
タッチパネル機能の判定
さて、Multitouch クラスは、タッチやジェスチャーが利用できるかどうか判別するための便利な属性も持っています。
Multitouch.supportsTouchEvents:Boolean Multitouch.supportsGestureEvents:Boolean Multitouch.maxTouchPoints:int Multitouch.supportedGestures:Vector.<String>
最初の 2 つはそれぞれタッチイベントとジェスチャーイベントの利用可否を判別するための属性です。Mac OS 10.5.3 以降では、ハードウェアがジェスチャイベントをサポートしていない場合でも、supportsGestureEvents の値は常に true になるそうです (注:AIR の場合のみと思われる)。ご注意下さい。
maxTouchPoints からは同時にタッチできる数の最大値がわかります。
ハードウェアがタッチをサポートするのかは、新しく追加された Capabilities.touchscreenType でも知ることができます。
Capabilities.touchscreenType:String [read-only]
設定される値は TouchscreenType クラスに 定義されていて、下の 3 種類があります。
- TouchscreenType.FINGER 指で操作するタッチスクリーンが利用可能
- TouchscreenType.STYLUS スタイラスで操作するタッチスクリーンが利用可能
- TouchscreenType.NONE 利用できるタッチスクリーンが無い
対応する OS の情報
Multitouch クラスに話を戻して、supportedGestures には利用可能なジェスチャーイベント名が文字列のベクターとして格納されています。環境ごとに利用できるジェスチャーイベントが異なるため、この属性が用意されています。
というわけで、ここでジェスチャーの使える環境を再確認しておきます。
まず、現時点でマルチタッチ関連の新しいイベント (タッチイベントとジェスチャーイベント) がサポートされる OS は、
- Windows 7 以降
- Mac OS X 10.5.3 以降
- iPhone OS 3.0 (あまり意味はなくなりましたが)
- Android (こちらは最近発表されました)
の 4 つです。
ただし、タッチイベントは Mac OS X ではサポートされていません。また、ジェスチャーイベントも Mac OS X 上のブラウザ内では利用できません。(これは前回の記事にも書いたとおり)
下の SWF で今の閲覧環境におけるマルチタッチのサポート状況が分かります (Flash Player 10.1 必須)。
一部の Windows 7 と Android 環境では、タッチもしくはジェスチャーのサポートが true になっていると思います。(AIR から同じコンテンツを実行すれば、もう少し使える環境が増えると思います)
Capabilities.touchscreenType はタッチスクリーン付のデバイスでも NONE が設定されることがあるようです。正式版のリリース時には直っていることでしょう (期待)。
コメントする