HAKUHIN's home page
更新履歴
 
 



サポートする入力コントロールを調べる
 


■利用可能な入力コントロールを調べる

Flash で使用できる入力コントロールとして以下の種類があります。
 




 


■タッチスクリーン

タッチスクリーンのタイプを調べるには、
 
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";

	});
}
 
 



HAKUHIN's home page バナー http://hakuhin.jp/
(c) Hakuhin & 日新礼符 2002-2011 解像度1024×768以上 IE8.0以上推奨
/ 閲覧中: