トラブルシューティング
Flash Player 10.1 以降、Adobe AIR 2 以降
ハードウェアとソフトウェアにおけるタッチ入力のサポートは急速に変化しています。この資料は、マルチタッチをサポートしているデバイスおよびオペレーティングシステムとソフトウェアの組み合わせに関するリストを示したものではありません。ここでは、検出 API を使用して、マルチタッチをサポートしているデバイスにアプリケーションをデプロイできるかどうか判断するためのガイダンスと、ActionScript コードのトラブルシューティングのヒントを提供しています。
Flash ランタイムは、デバイス、オペレーティングシステムまたは搭載されているソフトウェア(ブラウザーなど)からランタイムに渡される情報に基づいて、タッチイベントに応答します。このようなソフトウェア環境への依存が原因で、マルチタッチ対応の説明が複雑化しています。ジェスチャ動作またはタッチ動作の解釈はデバイスによって異なります。例えば、2 本の指を同時に回転させる動作を回転として定義するのか、画面上で 1 本の指を使用して円を描く動作を回転とするのか。ハードウェアとソフトウェア環境によって、回転ジェスチャはこのどちらかの動作で定義される場合もあれば、全く異なる動作の場合もあります。したがって、デバイスがユーザー入力を解釈してオペレーティングシステムに伝達し、オペレーティングシステムがその情報をランタイムに渡します。ランタイムがブラウザー内にあると、ブラウザーソフトウェアがジェスチャイベントまたはタッチイベントを解釈して、その入力をランタイムに渡さない場合があります。この動作は、「ホットキー」の動作と似ています。例えば、特定のキーの組み合わせを使用して、ブラウザー内で Flash Player を操作しようとすると、ブラウザーではメニューが開いた状態になるだけです。
個々の API およびクラスには、互換性のないオペレーティングシステムについての説明があります。次のサイトでは、Multitouch クラスを始めとして、個々の API エントリを調べることができます。http://help.adobe.com/ja_JP/FlashPlatform/reference/actionscript/3/flash/ui/Multitouch.html
以下に、一般的なジェスチャおよびタッチについて説明します。
- パン
- 指を左から右または右から左に動かします。デバイスによっては、2 本指でパンする必要があります。
- 回転
- 2 本の指でタッチしてから、円の周囲をなぞるようにその指を動かします(画面上でイメージした円を 2 本の指で同時にトレースしているような動作です)。2 本指のタッチポイントの中間点がピボットポイントとして設定されます。
- スワイプ
- 3 本の指を左から右、右から左、上から下、下から上にすばやく動かします。
- Zoom(ズーム)
- 2 本の指でタッチして、ズームインするには両方の指を引き離すように動かし、ズームアウトするには両方の指を近づけます。
- 押しながらタップ
- 1 本の指を動かしながら、または押しながら、別の指で画面をタップします。
デバイスがサポートしているジェスチャおよびデバイス上でジェスチャを実行する方法については、デバイスごとに独自のドキュメントが用意されています。一般に、ジェスチャ間では、デバイスと接触しているすべての指をデバイスから離す必要があります。ただし、この動作はオペレーティングシステムによって異なります。
アプリケーションがタッチイベントまたはジェスチャに応答していないことを検出したら、次の点を確認してください。
InteractiveObject クラスを継承したオブジェクトクラスにアタッチされているタッチイベントまたはジェスチャイベントに対してイベントリスナーを用意していることを確認してください。タッチイベントやジェスチャイベントを監視できるのは、InteractiveObject インスタンスだけです。
アプリケーションのテストを Flash Professional CS5 内で実行している場合は、Flash Professional が操作を阻害している可能性があるので、アプリケーションのパブリッシュとテストを試行してください。
まず単純な処理を実行して、動作を確認してください(次のコード例は、Multitouch.inputMode の API エントリから援用したものです)。
Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT;
var mySprite:Sprite = new Sprite();
var myTextField:TextField = new TextField()
mySprite.graphics.beginFill(0x336699);
mySprite.graphics.drawRect(0,0,40,40);
addChild(mySprite);
mySprite.addEventListener(TouchEvent.TOUCH_TAP, taplistener);
function taplistener(e:TouchEvent): void {
myTextField.text = "I've been tapped";
myTextField.y = 50;
addChild(myTextField);
}
長方形をタップします。この例が動作する場合は、現在の環境で単純なタップがサポートされていることがわかります。この後で、より複雑な処理を試みます。
ジェスチャサポートのテストはさらに複雑です。各デバイスやオペレーティングシステムが様々な組み合わせのジェスチャ入力を個別にサポートしている場合とサポートしていない場合があります。
次にズームジェスチャの簡単なテストを示します。
Multitouch.inputMode = MultitouchInputMode.GESTURE;
stage.addEventListener(TransformGestureEvent.GESTURE_ZOOM , onZoom);
var myTextField = new TextField();
myTextField.y = 200;
myTextField.text = "Perform a zoom gesture";
addChild(myTextField);
function onZoom(evt:TransformGestureEvent):void {
myTextField.text = "Zoom is supported";
}
デバイスのズームジェスチャを実行し、テキストフィールドにメッセージ Zoom is supported が設定されるかどうかを確認します。テストアプリケーションのどの箇所でもジェスチャを実行できるように、ステージにイベントリスナーが追加されます。
次にパンジェスチャの簡単なテストを示します。
Multitouch.inputMode = MultitouchInputMode.GESTURE;
stage.addEventListener(TransformGestureEvent.GESTURE_PAN , onPan);
var myTextField = new TextField();
myTextField.y = 200;
myTextField.text = "Perform a pan gesture";
addChild(myTextField);
function onPan(evt:TransformGestureEvent):void {
myTextField.text = "Pan is supported";
}
デバイスのパンジェスチャを実行し、テキストフィールドにメッセージ Pan is supported が設定されるかどうかを確認します。テストアプリケーションのどの箇所でもジェスチャを実行できるように、ステージにイベントリスナーが追加されます。
オペレーティングシステムとデバイスの組み合わせによっては、両方のジェスチャをサポートする場合や、どちらか一方のジェスチャのみをサポートする場合や、ジェスチャを一切サポートしない場合があります。アプリケーションのデプロイメント環境をテストします。
既知の問題
タッチ入力に関連する既知の問題には次のものがあります。
Windows Mobile オペレーティングシステムの Internet Explorer Mobile では、SWF ファイルのコンテンツが自動的に拡大表示(ズーム)されます。
Internet Explorer のズーム機能は、SWF ファイルをホストしている HTML ページに次のコードを追加することによりオーバーライドされます。
<head>
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0">
</head>
Windows 7(および場合によってはその他のオペレーティングシステム)の場合、ジェスチャ間でポインティングデバイス(または指)を画面から離す必要があります。例えば、イメージを回転してズームする場合は、次のようにする必要があります。
回転ジェスチャを実行します。
画面からすべての指を離します。
画面上に指を戻し、ズームジェスチャを実行します。
Windows 7(および場合によってはその他のオペレーティングシステム)では、ユーザーのジェスチャが非常に高速の場合に、回転ジェスチャおよびズームジェスチャが常に「更新」フェーズを発生させるとは限りません。
Windows 7 Starter Edition ではマルチタッチをサポートしていません。詳しくは、AIR Labs Forum(http://forums.adobe.com/thread/579180?tstart=0)を参照してください。
Mac OS 10.5.3 以降では、ハードウェアがジェスチャイベントをサポートしていない場合でも、Multitouch.supportsGestureEvents の値は常に true です。