tmlibの練習ブログ

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

デフォルトのmain.jsをいじる13,既存クラス(オブジェクト)に関数追加

前回では関数の引数を知った。


[Documents]で見ると分かるように、tmlibに用意されたクラスにはたくさんの関数が、要素として登録されている。
そしてそこに、新しく関数を作る事もできる。


と言っても難しい話ではない。既存のクラスに新しく変数を作って、関数を代入すればいいだけ。
(むしろ他のプログラム言語と比べた時、制限が無さ過ぎるくらい)


例えば

if (key.getKey("z"))  { 
	// …省略
}
//以後追加
if (key.getKey("c"))  { 
	this.star.test = function(){ console.log(this.width); }
	this.star.test();
}

main.jsのkey.getKey("z")に並ぶ形でこう記述すれば、cキーでstarのwidthを表示できるようになる。


ただ気を付けなければいけないのは、testに入れてる関数の中での"this"の扱い。
見れば、this.star.width と今までなら書いていた所を、this.width だけで済ませている。


実はこのthis.は、指しているものが違っている。


元々this. というのは"自分自身"を指すのだけど、
this.star… と書いていた時のthis が MainScene なのに対し、
この関数内では、this. とは、star自身のことだ。
(だってstarの中のtestに入れて、その中から呼び出す関数だから)


言わば、thisと書く時に"そのプログラムの部分を持っているのは誰か?"が問われる。




ここまで来れば、当たり判定に拡大率を反映させる事も見えてきた。
まず、"拡大率を反映した横幅"を表示してみる。

if (key.getKey("z"))  { 
	// …省略
}
if (key.getKey("c"))  { 
	this.star.scale_sp_width = function() {console.log(this.width * this.scaleX);}
	this.star.scale_sp_width();
}


こんな感じで、拡大してからcを押すと数字が大きくなったはず。


f:id:superchineseland:20131121135927p:plain



ただ問題がある。

if (key.getKey("c"))  { 
	this.star.scale_sp_width = function() {this.width * this.scaleX;}
	var aaa = this.star.scale_sp_width();
	console.log(aaa); // # undefined…
}


こうして関数の結果を外に持ち出そうとした時、これではできないのだ。
(変数のスコープを思い出して、もしかしたら出来るかもしれないけど、それより良い手段がある)


次回はそこを学習し、拡大率に合わせた当たり判定の関数を、完成させる。


次回:デフォルトのmain.jsをいじる14,関数にreturn - tmlibの練習ブログ