Flash Player 10.1 (と AIR 2) の新機能であるマルチタッチとジェスチャーのサポートについて、まずは概要を少しばかり。
はじめに
既にご存知の方は飛ばしていただければと思いますが、Flash では新しい分野なので、最初に言葉の整理をしておくと、
- タッチ: デバイスに触れた、移動した、離れた、などの個々の動作
- マルチタッチ: 複数のタッチを同時に扱うこと
- ジェスチャー: 複数の動作の組み合わせ (例: 指をデバイスに 「触れて」 から 「横に移動」 する)
という感じかと思います。
"タッチ" はマウスの代わりにデバイスに直接触れることにより行う入力行為です。「クリックしていない」 という状態が無いことを除けばほぼマウスと同じように扱うことができます。Flash Player 10.1 ではタッチによる操作を処理できるよう、新しく TouchEvent が追加されています。
マルチタッチに対応するには、複数の指で操作が同時に行われた時、個々の指の動きを識別できる必要があります。そのため、TouchEvent にはタッチポイントを識別するための ID が属性として定義されています。指がデバイスに触れてから離れるまでの間、その指からの TouchEvent には同じ ID が割り当てられます。
さて、ジェスチャーは、特定の動作に特定の意味を持たせるものです。例えば、2 本の指を反対の方向に広げる → 拡大表示、というのは良く知られたジェスチャーです。その他にも、円を描いたらメニューを表示するというジェスチャーの使い方もあるかも知れません。また、ショートカットキー代わりに画面に文字を書いたら対応するコマンドを実行するというジェスチャーもあるかもしれません。とりあえず識別可能な動作であればジェスチャーとして使用される可能性を持っています。
まとめると、タッチは、デバイスの機能として検出可能な操作、という理解でよいかと思いますが、ジェスチャーは、ユーザーがデバイスに対して行うことのできる動作の捕捉、と捉えることができそうです。デバイスにユーザーが合わせる (タッチ) とユーザーにデバイスが合わせる (ジェスチャー) というコペルニクス的な (ちょっと大げさ) 視点の転換が両者の間にはありそうです。
容易に想像できるように、利用できるジェスチャーはプラットフォームにより異なります。また、ジェスチャーの実装の仕方も、ジェスチャーの判別を行ってくれるプラットフォームがあれば、タッチイベントだけ通知してそれらからジェスチャーに組み上げる作業は開発者任せのプラットフォームもあります。Flash Player 10.1 では標準的なジェスチャーの発生を知らせるジェスチャーイベントがサポートされていますが、TouchEvent を使ってジェスチャー処理用のライブラリを開発するという方法も選択できるようになっています。
マルチタッチと環境について
GUI であればポインティングデバイスが使える、というのはもはや "当然のこと" として受け入れられているかと思います。一方、マルチタッチやジェスチャーはその歴史が浅いこともあり、きちんと使える環境はまだまだ限られています。Flash Player 10.1 がサポートする、だけではマルチタッチ/ジェスチャーの利用には十分では無いのです。
タッチの情報が Flash ランタイム (Flash Player と AIR) に届くまでには以下のレイヤーを通ることになります。
- デバイス
- OS
- ブラウザ (もしくは何らかのコンテナ)
- Flash ランタイム
マルチタッチ/ジェスチャーに関して、上記それぞれのレイヤー全てがお互いにサポートする組み合わせ以外の環境では、ジェスチャーが使えない!ということになります。
例えば OS に関して、
Mac OS X の場合、Flash ランタイム がジェスチャーをサポートするのは 10.5.3 以降です。OS X でタッチイベント処理が追加されたのは 10.6 からですが、Flash ランタイムはまだ OS X のタッチイベントには対応していません (間に合わなかったようです)
Windows の場合、Windows 7 環境ではタッチイベント/ジェスチャーイベントともにサポートされます。Vista 以前はどちらもサポート外です
また、ブラウザに関して、
現在 Mac OS X 上のブラウザにはタッチの情報をプラグインに伝える仕組みが提供されていません。(Apple が Webkit の NPAPI を書き換える必要があるとのこと) そのため、OS X 上の Flash Player は OS のバージョンが 10.5.3 以降であってもジェスチャーイベントを受け取ることができません
といった制限があります。
さらに、デバイスに関してもいろいろと不具合があるようで、
下は Nexus One ではマルチタッチが正しく動かないことがある、というビデオです。これを見ると分かるように、操作中に 2 つの点の x 座標と y 座標の組み合わせが入れ替わるという現象が起きています。
(最初に Droid, 次に Nexus One を比較)
これはタッチを検出するデバイス (Synaptics ClearPad 2000 らしい?) の仕様によるものだとのことで、ソフトウェアのバージョンアップでは直らないようです。ジェスチャーの種類によってはこの不具合の影響を受け難い物もありそうですが、これを見るとマルチタッチのアプリケーションを提供するのはちょっと勇気が要りそうです。
ここ数年の HTC 製スマートフォンには同じセンサーが使われているという話だったので、検索してみたところ HTC Desire でも同じ現象が起きることを記録したビデオが見つかりました。
というわけで、
- OS がマルチタッチやジェスチャーに対応し始めたのは比較的最近である
- デバイスやブラウザのマルチタッチ対応はまだ過渡期であると考えられる
- その過渡期の製品がまだしばらく世に提供され続けるようだ
という状況であることを考えると、マルチタッチに真剣に取り組むのはまだ時期早尚のような気もします。が、Android 2.2 を前提としたデバイスが登場し始める頃 (今年末くらい?) になれば状況はあっという間に変わるかもしれません。やっぱり今から始めておいた方がよいかもですね。
コメントする