tmlibの練習ブログ

自分流にtmlibを触っていきます。分かったことを解説。入門用になれば…?

デフォルトから一本のゲームを完成させる2.グローバル関数でコードを短くする

前回ではオブジェクトを作り、ラベルの設定に使った。
だが今いち、ダラダラとして長い。そこを短くしていく。


一番下…、tm.define("MainScene", { }のカッコよりも更に下に、こういった関数を定義しよう。

function setLabel(that , l_obj){
	that.position.set(l_obj.x , l_obj.y);
	that.text = l_obj.text;
	that.align = l_obj.align;
	that.width = l_obj.width;
	that.fontSize = l_obj.fontSize;
}

関数の話でも少しやったが、関数に名前を付けることで(「setLable」)その関数を呼ぶ事ができる。
そしてこの関数を作った場所は、一番外側…という事で、つまりこれはグローバル変数と同じような感じで、どこからでもこの関数を呼べるのだ(グローバル関数、という)


そして今までラベルの設定をしていた所から、呼び出す。

l_obj = {
	x : SCREEN_WIDTH,
	y : 40,
	text : "score : " + userData.score,
	width : tm.app.width,
	align : "end",
	fontSize : 32 
}
setLabel(this.scoreLabel ,l_obj); // #グローバル関数でどこでも呼べる
this.addChild(this.scoreLabel);

ラベルと設定オブジェクトを関数の引数として渡し、その中で設定を行う。
そしてグローバル関数なのでどこでも呼べて、同じ書き方をしていた所すべてに(タイムやスピードのラベル設定部分にも)使える、という事だ。
(*やってみよう!)


自分の中で関数を使うなら.thisと指定する所を、この場合は引数に"this.scoreLabel"とか"this.timeLabel"を渡して設定してもらう、というわけ。


これで3つのラベルを作る部分を共通化できて、だいぶすっきりした。
だが、まだ短くできる部分はある気がする。
設定の前後…

this.scoreLabel = tm.app.Label();

this.addChild(this.scoreLabel);

といった部分。
ここもやはり"同じような書き方を繰り返している"気がする。
なんとかならないだろうか?


ここまでのコード(main.js)
http://spchinese.s601.xrea.com/tmlib_text/main_2013_11_25.txt
*バージョンは、tmlib.js 0.2.0で作成。