サポートする入力コントロールを調べる
■タッチスクリーン
タッチスクリーンのタイプを調べるには、
Capabilities.touchscreenType プロパティを調べます。
| 定数 | 文字 | 解説 |
| TouchscreenType.NONE | "none" | タッチスクリーンに未対応 |
| TouchscreenType.STYLUS | "stylus" | ペンによる入力に対応 |
| TouchscreenType.FINGER | "finger" | 指による入力に対応 |
取得例です。
タッチスクリーンのタイプを調べる
var text_field = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = 500;
text_field.height = 20;
text_field .border = true;
stage.addChild(text_field);
text_field.text = "タッチスクリーン:" + Capabilities.touchscreenType;
■マウス用カーソルのサポート
マウス用カーソルがサポートされているか調べるには、
Mouse.supportsCursor プロパティを調べます。
true であれば、サポートされています。
マウス用カーソルがサポートされているか調べる
var text_field = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = 500;
text_field.height = 20;
text_field .border = true;
stage.addChild(text_field);
text_field.text = "マウス用カーソルのサポート:" + Mouse.supportsCursor;
■物理キーボード
物理キーボードのタイプを調べるには、
Keyboard.physicalKeyboardType プロパティを調べます。
| 定数 | 文字 | 解説 |
| KeyboardType.NONE | "none" | 物理キーボードに未対応 |
| KeyboardType.KEYPAD | "keypad" | 携帯電話型の数字キーパッド |
| KeyboardType. ALPHANUMERIC |
"alphanumeric" | 標準の数字と文字キーが揃ったキーボード |
取得例です。
物理キーボードのタイプを調べる
var text_field = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = 500;
text_field.height = 20;
text_field .border = true;
stage.addChild(text_field);
text_field.text = "物理キーボードのタイプ:" + Keyboard.physicalKeyboardType;
■仮想キーボードのサポート
仮想キーボードがサポートされているか調べるには、
Keyboard.hasVirtualKeyboard プロパティを調べます。
true であれば、サポートされています。
仮想キーボードがサポートされているか調べる
var text_field = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = 500;
text_field.height = 20;
text_field .border = true;
stage.addChild(text_field);
text_field.text = "仮想キーボードのサポート:" + Keyboard.hasVirtualKeyboard;
タッチスクリーン入力を取得する
サンプルをダウンロード
■タッチイベントに対応しているか調べる
タッチイベントに対応しているか調べるには、
Multitouch.supportsTouchEvents プロパティを使用します。
true であれば、TouchEvent クラスのイベントを使用することができます。
タッチイベントに対応しているか調べる
var text_field = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = 500;
text_field.height = 20;
text_field .border = true;
stage.addChild(text_field);
text_field.text = "タッチイベントのサポート:" + Multitouch.supportsTouchEvents;
■インプットモードを設定する
タッチ操作の入力モードとして以下の種類があります。
| 定数 | 文字 | 解説 |
| MultitouchInputMode. NONE |
"none" | すべての操作をマウスイベントとして処理 |
| MultitouchInputMode. TOUCH_POINT |
"touchPoint" | 基本的なタッチ操作をイベント処理します。それ以外をマウスイベントとして処理します。 |
| MultitouchInputMode. GESTURE |
"gesture" | ジェスチャーがあればイベント処理します。それ以外をマウスイベントとして処理します。 |
入力モードを設定するには、Multitouch.inputMode プロパティを使用します。
デフォルトでは、MultitouchInputMode.GESTURE が格納されています。
「タッチイベント」と「ジェスチャーイベント」は、同時に使用できません。どちらか片方のイベントを利用するともう片方のイベントは使用できません。
ここでは、タッチイベントを使用しますので、
MultitouchInputMode.TOUCH_POINT を設定します。
インプットモードにタッチポイントに設定する
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
■タッチイベントの種類について
タッチイベントには以下のイベントがあります。
| イベント定数 | 解説 |
| TouchEvent.TOUCH_BEGIN | タッチを開始 | TouchEvent.TOUCH_MOVE | タッチしたまま平行移動 | TouchEvent.TOUCH_END | タッチを終了 | TouchEvent.TOUCH_OUT | インスタンスの外へ移動 | TouchEvent.TOUCH_OVER | インスタンスの内へ移動 | TouchEvent.TOUCH_ROLL_OUT | 自分の子を含むインスタンスの外へ移動 | TouchEvent.TOUCH_ROLL_OVER | 自分の子を含むインスタンスの内へ移動 | TouchEvent.TOUCH_TAP | タップ操作 |
タッチイベントを調べる
var text_field = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = 500;
text_field.height = 500;
text_field .border = true;
stage.addChild(text_field);
// TouchEvent をサポートしている
if(Multitouch.supportsTouchEvents){
// インプットモードをタッチポイントに設定
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
stage.addEventListener(TouchEvent.TOUCH_BEGIN,function(e:TouchEvent):void{
text_field.text = "タッチの開始 ID:" + e.touchPointID + "\n" + text_field.text;
});
stage.addEventListener(TouchEvent.TOUCH_MOVE,function(e:TouchEvent):void{
text_field.text = "タッチしながら移動中 ID:" + e.touchPointID + "\n" + text_field.text;
});
stage.addEventListener(TouchEvent.TOUCH_END,function(e:TouchEvent):void{
text_field.text = "タッチを終了 ID:" + e.touchPointID + "\n" + text_field.text;
});
stage.addEventListener(TouchEvent.TOUCH_OUT,function(e:TouchEvent):void{
text_field.text = "タッチしながらインスタンス外へ移動(子は外扱い) ID:" + e.touchPointID + "\n" + text_field.text;
});
stage.addEventListener(TouchEvent.TOUCH_OVER,function(e:TouchEvent):void{
text_field.text = "タッチしながらインスタンス内へ移動(子は外扱い) ID:" + e.touchPointID + "\n" + text_field.text;
});
stage.addEventListener(TouchEvent.TOUCH_ROLL_OUT,function(e:TouchEvent):void{
text_field.text = "タッチしながらインスタンス外へ移動(子は内扱い) ID:" + e.touchPointID + "\n" + text_field.text;
});
stage.addEventListener(TouchEvent.TOUCH_ROLL_OVER,function(e:TouchEvent):void{
text_field.text = "タッチしながらインスタンス内へ移動(子は内扱い) ID:" + e.touchPointID + "\n" + text_field.text;
});
stage.addEventListener(TouchEvent.TOUCH_TAP,function(e:TouchEvent):void{
text_field.text = "タップ操作 ID:" + e.touchPointID + "\n" + text_field.text;
});
}
■タッチイベントのプロパティについて
TouchEvent には以下のプロパティがあります。
| プロパティ名 | 型 | 解説 |
| localX | Number | インスタンス内(ローカル)の x 座標 |
| localY | Number | インスタンス内(ローカル)の y 座標 |
| stageX | Number | ステージの x 座標 |
| stageY | Number | ステージの y 座標 |
| sizeX | Number | 接触矩形の幅 |
| sizeY | Number | 接触矩形の高さ |
| pressure | Number | 接触の強さ(0.0~1.0) |
| touchPointID | int | タッチの識別ID(マルチタッチ用) |
取得例です。
タッチイベントのプロパティを調べる
var text_field = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = 500;
text_field.height = 500;
text_field .border = true;
stage.addChild(text_field);
// TouchEvent をサポートしている
if(Multitouch.supportsTouchEvents){
// インプットモードをタッチポイントに設定
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
stage.addEventListener(TouchEvent.TOUCH_MOVE,function(e:TouchEvent):void{
text_field.text = "";
text_field.text += "インスタンス内(ローカル)の x 座標:" + e.localX + "\n";
text_field.text += "インスタンス内(ローカル)の y 座標:" + e.localY + "\n";
text_field.text += "ステージの x 座標:" + e.stageX + "\n";
text_field.text += "ステージの y 座標:" + e.stageY + "\n";
text_field.text += "接触矩形の幅:" + e.sizeX + "\n";
text_field.text += "接触矩形の高さ:" + e.sizeY + "\n";
text_field.text += "接触の強さ(0.0~1.0):" + e.pressure + "\n";
text_field.text += "タッチの識別ID(マルチタッチ用):" + e.touchPointID + "\n";
});
}
■マルチタッチスクリーン入力を取得する
マルチタッチ操作を行った場合、TouchEvent イベントの touchPointID プロパティに重複しない番号が新しく生成され、関数が実行されます。
このユニーク(唯一)な ID 番号を調べる事で、各シングルタッチとしての変化を追いかけることができます。
■マルチタッチの最大同時タッチポイント数を調べる
同時にタッチできるポイント数を取得するには、Multitouch.maxTouchPoints プロパティを使用します。
タッチイベントを調べる
var text_field = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = 500;
text_field.height = 20;
text_field .border = true;
stage.addChild(text_field);
text_field.text = "最大同時タッチポイント数:" + Multitouch.maxTouchPoints;
ジェスチャー入力を取得する
サンプルをダウンロード
■ジェスチャーとは?
マルチタッチスクリーンの機能を利用した特殊な操作をジェスチャーといいます。
例えば、「2つの指で同時にタップする」「タッチしたまま平行移動する」「2本の指で回転する」といった操作です。
ジェスチャーは、自前で計算する必要はなくイベントとして検出することができます。
■ジェスチャーイベントに対応しているか調べる
ジェスチャーイベントに対応しているか調べるには、
Multitouch.supportsGestureEvents プロパティを使用します。
true であれば、GestureEvent クラスを使用することができます。
ジェスチャーイベントに対応しているか調べる
var text_field = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = 500;
text_field.height = 20;
text_field .border = true;
stage.addChild(text_field);
text_field.text = "ジェスチャーイベントのサポート:" + Multitouch.supportsGestureEvents;
■インプットモードを設定する
タッチ操作の入力モードをジェスチャーに変更するには、Multitouch.inputMode プロパティに MultitouchInputMode.GESTURE をセットします。
この入力モードに設定すると、TouchEvent が使用できなくなります。
インプットモードを設定する
Multitouch.inputMode = MultitouchInputMode.GESTURE;
■ジェスチャーイベントを持つクラス
ジェスチャーイベントが利用できるクラスは以下の種類があります。
■各イベントをサポートしているか調べる
各ジェスチャーのイベントが利用できるか調べるには、
Multitouch.supportedGestures プロパティを使用します。
このプロパティは、配列になっていて以下の定数が格納されていれば利用できる事がわかります。
| イベント定数 | 解説 |
| GestureEvent.GESTURE_TWO_FINGER_TAP | 2つの指で同時にタップする | TransformGestureEvent.GESTURE_PAN | 複数の指でタッチしたまま平行移動 | TransformGestureEvent.GESTURE_SWIPE | 払うような動作 | TransformGestureEvent.GESTURE_ROTATE | 2つの指でタッチしたまま中心を軸に回転 | TransformGestureEvent.GESTURE_ZOOM | 2つの指でタッチしたまま距離を変化 | PressAndTapGestureEvent. GESTURE_PRESS_AND_TAP |
タッチしたままさらに2本目の指でタップ |
確認例です。
ジェスチャーイベントに対応しているか調べる
var text_field = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = 500;
text_field.height = 20;
text_field .border = true;
stage.addChild(text_field);
if(Multitouch.supportsGestureEvents){
var i:int;
var num:int = Multitouch.supportedGestures.length;
for(i=0;i < num;i++){
switch(Multitouch.supportedGestures[i]){
case GestureEvent.GESTURE_TWO_FINGER_TAP:
text_field.text += "2つの指で同時にタップする\n";
break;
case TransformGestureEvent.GESTURE_PAN:
text_field.text += "2複数の指でタッチしたまま平行移動\n";
break;
case TransformGestureEvent.GESTURE_SWIPE:
text_field.text += "払うように移動\n";
break;
case TransformGestureEvent.GESTURE_ROTATE:
text_field.text += "2本指で回転(2本指の角度を変化)\n";
break;
case TransformGestureEvent.GESTURE_ZOOM:
text_field.text += "2本指で拡大縮小(2本指の距離を変化)\n";
break;
case PressAndTapGestureEvent.GESTURE_PRESS_AND_TAP:
text_field.text += "タッチしたままさらに2本目の指でタップ\n";
break;
};
}
}
■GestureEvent クラスを使ったジェスチャー検出
GestureEvent クラスは以下のイベントがあります。
| イベント定数 | 解説 |
| GestureEvent.GESTURE_TWO_FINGER_TAP | 2つの指で同時にタップする |
使用例です。
Gesture イベントを使用する
var text_field = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = 500;
text_field.height = 500;
text_field .border = true;
stage.addChild(text_field);
// TouchEvent をサポートしている
if(Multitouch.supportsGestureEvents){
// インプットモードをジェスチャーに設定
Multitouch.inputMode = MultitouchInputMode.GESTURE;
stage.addEventListener(GestureEvent.GESTURE_TWO_FINGER_TAP,function(e:GestureEvent):void{
text_field.text = "2本の指で同時にタップする\n";
});
}
■TransformGestureEvent クラスを使ったジェスチャー検出
TransformGestureEvent クラスは以下のイベントがあります。
| イベント定数 | 解説 |
| TransformGestureEvent.GESTURE_PAN | 複数の指でタッチしたまま平行移動 | TransformGestureEvent.GESTURE_SWIPE | 払うような動作 | TransformGestureEvent.GESTURE_ROTATE | 2つの指でタッチしたまま中心を軸に回転 | TransformGestureEvent.GESTURE_ZOOM | 2つの指でタッチしたまま距離を変化 |
TransformGestureEvent クラスには以下のプロパティがあります。
スワイプ操作の場合、オフセット座標ではなく長さが1のベクトルが得られます。
| プロパティ名 | 型 | 解説 |
| offsetX | Number | 前回のジェスチャーから変化した x 座標値 |
| offsetY | Number | 前回のジェスチャーから変化した y 座標値 |
| rotation | Number | 前回のジェスチャーから変化した角度 |
| scaleX | Number | 前回のジェスチャーから変化した x 方向拡大率 |
| scaleY | Number | 前回のジェスチャーから変化した y 方向拡大率 |
| stageX | Number | 複数指の中心 x 座標 |
| stageY | Number | 複数指の中心 y 座標 |
使用例です。
TransformGesture イベントを使用する
var text_field = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = 500;
text_field.height = 500;
text_field .border = true;
stage.addChild(text_field);
// GestureEvent をサポートしている
if(Multitouch.supportsGestureEvents){
// インプットモードをジェスチャーに設定
Multitouch.inputMode = MultitouchInputMode.GESTURE;
stage.addEventListener(TransformGestureEvent.GESTURE_SWIPE,function(e:TransformGestureEvent):void{
text_field.text += "スワイプ操作 x:" + e.offsetX + " y:" + e.offsetY + "\n";
});
stage.addEventListener(TransformGestureEvent.GESTURE_PAN,function(e:TransformGestureEvent):void{
text_field.text += "パン操作 x:" + e.offsetX + " y:" + e.offsetY + "\n";
});
stage.addEventListener(TransformGestureEvent.GESTURE_ROTATE,function(e:TransformGestureEvent):void{
text_field.text += "ローテーション操作 r:" + e.rotation + "\n";
});
stage.addEventListener(TransformGestureEvent.GESTURE_ZOOM,function(e:TransformGestureEvent):void{
text_field.text += "ズーム操作 x:" + e.scaleX + " y:" + e.scaleY + "\n";
});
}
■PressAndTapGestureEvent クラスを使ったジェスチャー検出
PressAndTapGestureEvent クラスは以下のイベントがあります。
| イベント定数 | 解説 |
| PressAndTapGestureEvent. GESTURE_PRESS_AND_TAP |
タッチしたままさらに2本目の指でタップ |
TransformGestureEvent クラスには以下のプロパティがあります。
| プロパティ名 | 型 | 解説 |
| tapStageX | Number | タップが発生したローカル x 座標 |
| tapStageY | Number | タップが発生したローカル y 座標 |
| tapStageX | Number | タップが発生したステージ上の x 座標 |
| tapStageY | Number | タップが発生したステージ上の y 座標 |
使用例です。
PressAndTapGesture イベントを使用する
var text_field = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = 500;
text_field.height = 500;
text_field .border = true;
stage.addChild(text_field);
// GestureEvent をサポートしている
if(Multitouch.supportsGestureEvents){
// インプットモードをジェスチャーに設定
Multitouch.inputMode = MultitouchInputMode.GESTURE;
stage.addEventListener(PressAndTapGestureEvent.GESTURE_PRESS_AND_TAP,function(e:PressAndTapGestureEvent):void{
text_field.text += "タッチしたままさらに2本目の指でタップ x:" + e.tapStageX + " y:" + e.tapStageY + "\n";
});
}

