読者です 読者をやめる 読者になる 読者になる

とりあえずWiiでキーイベントとってみたよ

インターネットチャンネル向けのウェブページを作りたいのですが…。ってあったからとりあえずちゃちゃっとキーのイベント+ちょっとだけ触ってみたよ


まだ途中だけど経過。やっぱりおもちゃが増えると嬉しいね。
リスナーの削除とかつけて、リスナーのコールバックのスコープ固定できるようにした後、リモコンの色々なステータスもとれるようにしてくよ。段々と過程を公開していきまする。


拡張していきながら後々一通りためせるようにライブラリっぽくしてみたり

if( Toytools == undefined ){
	var Toytools = function(){}
}
/**
 * Toytools.Wii
 * 
 * 
 */
Toytools.Wii = {
	_initialized:false,
	_keyLisnerHolder:false,
	/**
	* Wiiかどうか
	* @return bool
	*/
	isWii:function(){
		var ua = navigator.userAgent;
		var list = ua.split(';');
		return ( list[0].indexOf( 'Nintendo Wii' ) != -1 );
	},
	/**
	* 高さの取得
	* @return Number
	*/
	getHeight:function(){
		return window.innerHeight;
	},
	/**
	* リスナーの登録
	* リスナーにはonKeyDownとonKeyUpイベントが有効です
	* @param Object
	* 		{ onKeyDown:function , onKeyUp:function }
	*/
	addKeyListener:function( keyCode , listener ){
		Toytools.Wii._initKeyEvent();
		if( Toytools.Wii._keyLisnerHolder[keyCode] == undefined ){
			Toytools.Wii._keyLisnerHolder[keyCode] = new Array();
		}
		Toytools.Wii._keyLisnerHolder[keyCode].push( listener );
	},
	
	//--- PRIVATE ------------------------------
	_onKeyDown:function(e){
		var keyCode = e.which;
		if(
			Toytools.Wii._keyLisnerHolder[keyCode] == undefined ||
			Toytools.Wii._keyLisnerHolder[keyCode].length == 0
		){
			return;
		}
		var targetList = Toytools.Wii._keyLisnerHolder[keyCode];
		for( k in targetList ){
			if( targetList[k].onKeyDown != undefined ){
				targetList[k].onKeyDown();
			}
		}
		
	},
	_onKeyUp:function(e){
		var keyCode = e.which;
		if(
			Toytools.Wii._keyLisnerHolder[keyCode] == undefined ||
			Toytools.Wii._keyLisnerHolder[keyCode].length == 0
		){
			return;
		}
		var targetList = Toytools.Wii._keyLisnerHolder[keyCode];
		for( k in targetList ){
			if( targetList[k].onKeyUp != undefined ){
				targetList[k].onKeyUp();
			}
		}
		
	},
	_initKeyEvent:function(){
		if( Toytools.Wii._initialized ){
			return;
		}
		Toytools.Wii._initialized = true;
		Toytools.Wii._keyLisnerHolder = new Array();
		window.document.onkeydown = Toytools.Wii._onKeyDown;
		window.document.onkeyup   = Toytools.Wii._onKeyUp;
	}
	
}
Toytools.Wii.Key = {
	UP:175,
	DOWN:176,
	LEFT:178,
	RIGHT:177,
	A:13,
	B:171,
	MINUS:170,
	PLUS:174,
	ONE:172,
	TWO:173 	
}


こんな感じで使えるよ!

var keyUpListener = {
	onKeyDown:function(){ log('UP---Down') },
	onKeyUp:function(){ log('UP---Up') }
}
var keyDownListener = {
	onKeyDown:function(){ log('Down---Down') },
	onKeyUp:function(){ log('Down---Up') }
}
var keyLeftListener = {
	onKeyDown:function(){ log('Left---Down') },
	onKeyUp:function(){ log('Left---Up') }
}
var keyRightListener = {
	onKeyDown:function(){ log('Right---Down') },
	onKeyUp:function(){ log('Right--Up') }
}
var keyOneListener = {
	onKeyDown:function(){ log('1---Down') },
	onKeyUp:function(){ log('1--Up') }
}
Toytools.Wii.addKeyListener( Toytools.Wii.Key.UP    , keyUpListener );
Toytools.Wii.addKeyListener( Toytools.Wii.Key.DOWN  , keyDownListener );
Toytools.Wii.addKeyListener( Toytools.Wii.Key.LEFT  , keyLeftListener );
Toytools.Wii.addKeyListener( Toytools.Wii.Key.RIGHT  , keyRightListener );
Toytools.Wii.addKeyListener( Toytools.Wii.Key.ONE  , keyOneListener );

リスナーの追加はできるけど、まだ削除はできないのよね・・・
リスナーにはonKeyDownとonKeyUpってイベントを定義してください


あ、コードは勝手に煮るなり焼くなり好きにしてください。
色々遊べるように情報公開してくれた任天堂サンクス





と言いたいところだけれど、このせいでプリズンブレイク2の初めの20分くらい見逃した・・・
どうしてくれんだ・・・