リプタクのもう覚えられません
Google
Web サイト内
topmemo ▶ キーボード2度押し防止

ActionScript

キーボード2度押し防止

キーボードを押し続けた場合、キーボードイベントが連続して実行されるのを防ぐサンプル。
処理としては、1度押されたキーをキーアップするまで変数に格納しておき、格納済みのキーは2回目以降の処理を中断させている。


as3コード(サンプルその1)

//変数
var key_arr:Array = [];
for(var i:uint = 0;i<222;i++){
	key_arr.push(0);
}

//リスナ登録
stage.addEventListener(KeyboardEvent.KEY_DOWN,f_key_down);
stage.addEventListener(KeyboardEvent.KEY_UP,f_key_up);

//key_down
function f_key_down(e:KeyboardEvent):void{
	
	//押しっぱなし処理中断
	if(key_arr[e.keyCode] == 1){
		return;
	}
	
	//key登録
	key_arr[e.keyCode] = 1;
	
	//以下イベント処理記述
	for(var i:uint=0;i<222;i++){
		if(key_arr[i] == 1){
			trace("keyCode=" + String(i));
		}
	}
	
	e.updateAfterEvent();
}

//key_up
function f_key_up(e:KeyboardEvent):void{
	
	//key解除
	key_arr[e.keyCode] = 0;
	
	e.updateAfterEvent();
}


as3コード(サンプルその2)

//変数
var key_arr:Array = [];//キーコード格納用

//リスナー登録
stage.addEventListener(KeyboardEvent.KEY_DOWN,f_key_down);
stage.addEventListener(KeyboardEvent.KEY_UP,f_key_up);

//key_down
function f_key_down(e:KeyboardEvent):void{
	
	//keyチェック→押しっぱなし処理中断
	var a:uint = key_arr.length;
	for(var i:uint = 0;i<a;i++){
		if(key_arr[i] == e.keyCode){
			return;
		}
	}
	
	//key登録
	key_arr.push(e.keyCode);
	
	//以下キーボードイベント記述
	trace(key_arr);
	
	e.updateAfterEvent();
}

//key_up
function f_key_up(e:KeyboardEvent):void{
	
	//key解除
	var a:uint = key_arr.length;
	for(var i:uint = 0;i<a;i++){
		if(key_arr[i] == e.keyCode){
			key_arr.splice(i,i+1);
			return;
		}
	}
	
	e.updateAfterEvent();
}
last update 2012.4.18
参考・出典等
「特に無し」

▲page top

topmemogalleryblogtestaboutlinksmail
Copylight(C)2008-2012 Riptac. All Rights Reserved.