Flashゲームプログラミング講座 for ActionScript3.0

 

マウスロックについて

 


■マウスロックの機能

 
マウスロックを使用すると、マウスカーソルが固定され、動かなくなります。
 
マウスイベントから、マウスの移動量を取得する事ができます。
 
これにより、モニタの画面端を超えるような移動を行ったとしても、正確なマウスの移動量を検出し続けることができます。
 
一人称視点の3Dゲームのマウス操作などに利用すると快適です。
 
Flash Player 11.2 以降、AIR 3.2 以降で、利用可能です。
 
 

 

マウスロックを開始する

 


■マウスロックを開始する

 
■マウスロックを開始する
 
stage.mouseLock プロパティを使用します。
 
true をセットします。
 
■マウスロックが利用可能なタイミングについて
 
フルスクリーン表示中のみ、利用可能です。
 
フルスクリーン動作中ではない場合、エラーが発生します。
 
■マウスロック機能のサポートについて
 
マウスロック機能は、環境によっては対応していません。
 
エラーの発生で、サポートの有無を判別できます。
 
■使用例
 
クリックして、フルスクリーン表示と、マウスロックを開始する

import flash.display.StageDisplayState;
import flash.events.MouseEvent;

// ------------------------------------------------------------
// マウスの左ボタンをクリックすると実行されるイベント
// ------------------------------------------------------------
stage.addEventListener( MouseEvent.MOUSE_DOWN , function (e:MouseEvent):void{

	// ------------------------------------------------------------
	// フルスクリーンを開始する
	// ------------------------------------------------------------
	stage.displayState = StageDisplayState.FULL_SCREEN;

	// ------------------------------------------------------------
	// マウスロックを開始する
	// ------------------------------------------------------------
	try{
		stage.mouseLock = true;

	}catch(e:Error){
	}
});
 
 

 

マウスロックを終了する

 


■マウスロックを終了する

 
stage.mouseLock プロパティを使用します。
 
false をセットします。
 
■終了可能なタイミングについて
 
フルスクリーン表示中のみ、終了可能です。
 
フルスクリーン動作中ではない場合、エラーが発生します。
 
■自動的に解除される場合
 
ユーザーの操作によって、マウスロックは解除されます。
 
フルスクリーンを終了した場合。
 
Flash Player の設定ダイアログが表示された場合。
 
『 Alt + Tab 』などのキーボード操作など。
 
■使用例
 
マウスロックを開始してから、10 秒後に終了する

import flash.display.StageDisplayState;
import flash.utils.setTimeout;
import flash.events.MouseEvent;

// ------------------------------------------------------------
// マウスの左ボタンをクリックすると実行されるイベント
// ------------------------------------------------------------
stage.addEventListener( MouseEvent.MOUSE_DOWN , function (e:MouseEvent):void{

	// ------------------------------------------------------------
	// フルスクリーンを開始する
	// ------------------------------------------------------------
	stage.displayState = StageDisplayState.FULL_SCREEN;

	// ------------------------------------------------------------
	// マウスロックを開始する
	// ------------------------------------------------------------
	try{
		stage.mouseLock = true;

	}catch(e:Error){
	}

	// ------------------------------------------------------------
	// 10 秒後に、関数を実行する
	// ------------------------------------------------------------
	setTimeout(function():void{

		// ------------------------------------------------------------
		// マウスロックを終了する
		// ------------------------------------------------------------
		try{
			stage.mouseLock = false;

		}catch(e:Error){
		}

	} , 1000 * 10);

});
 
 

 

マウスの移動量を取得する

 


■マウスイベントから移動量を取得する

 
■マウスが移動したか監視する
 
MouseEvent.MOUSE_MOVE イベントを使用します。
 
フルスクリーン動作中は、Stage にのみマウスイベントが伝達されます。
 
よって、stage にリスナーを登録する必要があります。
 
■マウスイベントから移動量を取得する
 
以下のプロパティを使用します。
 
マウスロック動作中ではない場合、常に 0 値が得られます。
 
プロパティ名説明
movementXNumber水平方向のマウスの移動量を取得する。
movementYNumber垂直方向のマウスの移動量を取得する。
 
■使用例
 
マウスの移動量を取得する

import flash.display.StageDisplayState;
import flash.text.TextField;
import flash.events.MouseEvent;

// ------------------------------------------------------------
// テキストフィールド
// ------------------------------------------------------------
// テキストフィールドを作成
var text_field:TextField = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width  = stage.stageWidth  - 20;
text_field.height = stage.stageHeight - 20;
text_field.border = true;
stage.addChild(text_field);

// ------------------------------------------------------------
// マウスカーソルが移動したときに呼び出されるイベント
// ------------------------------------------------------------
stage.addEventListener( MouseEvent.MOUSE_MOVE , function (e:MouseEvent):void{

	// 水平方向のマウスの移動量を取得
	var x:Number = e.movementX;

	// 垂直方向のマウスの移動量を取得
	var y:Number = e.movementY;

	// テキストフィールドに出力
	text_field.text = x + " , " + y;
});

// ------------------------------------------------------------
// マウスの左ボタンをクリックすると実行されるイベント
// ------------------------------------------------------------
stage.addEventListener( MouseEvent.MOUSE_DOWN , function (e:MouseEvent):void{

	// ------------------------------------------------------------
	// フルスクリーンを開始する
	// ------------------------------------------------------------
	stage.displayState = StageDisplayState.FULL_SCREEN;

	// ------------------------------------------------------------
	// マウスロックを開始する
	// ------------------------------------------------------------
	try{
		stage.mouseLock = true;

	}catch(e:Error){
	}
});