WIZ-CODE.blog

JavaScriptやAjaxをテーマとしたブログです。

*

またもバージョン変更……

      2010/10/25

ちょっとスマートになったJS Adventure バージョン2.0 先日バージョン変えたばかりですが、コード的に見てスマートさからかけ離れていることを理由にすぐさまJS Adventureをバージョン2.0を作りました。サンプルデモもあります。これまでのはゲームイベントの順序をscriptaculousのエフェクトキューで管理するなど、やり方に無駄というかおかしな点が多かったので、まずエフェクトキュー管理を廃止して作り直しています。例によって互換性がないのでバージョンとかいう表現があやしいですが……。 今回のバージョンは新しい機能が出たというわけではないものの、Prototype.jscurryメソッドなど、いままで使途が分からず使ってこなかった機能を使っています。curryメソッドは、関数をあらかじめ引数を渡した状態のものに変えるメソッド。つまり、いくつか引数が必要だった関数をcurryメソッドでカリー化することで、引数なしで実行できる関数に作り変えられます。 使い道としては、JavaScriptのネイティブメソッドsetTimeoutを使う時などがあります。setTimeoutのコールバック関数に引数をつけようとすると文字列に直すといったスマートでないやり方が必要だったりしますが、ここでcurryメソッドを使うと、すでに引数を渡した状態の関数に変換でき、見た目もスマートになります。 Prototype.jsのcurryメソッド使用例(Prototype.jsが必要)
 
arg1 = 100, arg2 = 300;
 
//関数を文字列にして引数を渡すやり方。ちょっとカッコ悪い
timer1 = setTimeout("myFunction(" + arg1 + ", " + arg2")", 100);
 
//curryメソッドで関数をラップして無理なく表記した例
timer2 = setTimeout(myFunction.curry(arg1, arg2), 100);
 
JS Adventureのバージョン2.0では、テキストをタイプ表示するとき、文字列を数文字ずつタイプしては再帰的にメソッドを呼び出す方法を使っているので、curryメソッドが非常に役立ちました。バージョン2.0のデモページでは簡単な設置方法を載せてるので是非ご覧ください。 ⇒JS Adventure 2.0のデモ 早くもバージョン2.0に切り替えた古いサンプル群 JavaScriptでノベルゲーム JavaScriptでクイズゲーム :::追記::: setTimeoutsetIntervalに渡すことを前提にしたシンプルな関数を作ってみました。curryTimerCallbackの第1引数にタイマーにかける関数を渡し、第2引数以降にその関数に渡す引数を並べていきます。もちろんライブラリ依存はありません。 curryTimerCallback
 
function curryTimerCallback() {
	var userFunc = arguments[0],
		args = Array.prototype.slice.call(arguments, 1);
	
	return function() {
		return userFunc.apply(this, args);
	};
}

var x = 100, y = 300;

//3秒後に400とアラート
setTimeout( curryTimerCallback( alertAdd, x, y ), 3000 );

function alertAdd(x, y) {
	alert(x + y);
}
 

 - JavaScript/Ajax, ゲーム , ,