tmlibの練習ブログ

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

デフォルトのmain.jsをいじる14,関数の外にデータを持ち出す(return)

前回の続き。

変数のスコープの関係上、関数内で使われた数値を外に持ち出すためには、一工夫がいる。
(もちろんグローバル変数を使っても持ち出せるが、関数のたび作っていては不便)


returnというものが用意されている。


具体的には

this.star.scale_sp_width = function() {
	var aaa = this.width * this.scaleX;
	return aaa; // #変数aaa(の中身)を返す。
}
var result = this.star.scale_sp_width(); // #変数aaa(の中身)をreslutに受け取る
console.log(result);

これで、関数内で作った変数の中身を返せる。
もっと省略して

this.star.scale_sp_width = function() {
	return (this.width * this.scaleX); // #関数の結果をreturnで返す
}
var result = this.star.scale_sp_width(); // #関数の結果を受け取る
console.log(result);

これでもいい。
わざわざ変数を用意しなくても、this.width * this.scaleX の結果を、外側に持ち出せる。


ただし一つ気を付けるのは、returnはデータを返して、関数をそこで終了させて(切り上げて)しまう。

this.star.scale_sp_width = function() {
	return (this.width * this.scaleX);
	this.scaleX += 200; // #ここに辿り着く前に、returnで関数から脱出している
}


"関数の計算結果を、(最終的に)returnで返す"といった用途で使うのがいいだろう。




さてここまでくれば、拡大率を反映する高さ・幅の関数を.starに追加、

// …省略
this.star = tm.app.Sprite("CAT");
this.star.scale_sp_width = function() {return (this.width * this.scaleX);} // #追加
this.star.scale_sp_height = function() {return (this.height * this.scaleY);} // #追加
this.addChild(this.star);

あとはsetSizeを使い、

// …省略
if (key.getKey("z"))  { 
	this.star.scaleX += 0.1;
	this.star.scaleY += 0.1;
	this.star.setSize(this.star.scale_sp_width() , this.star.scale_sp_height()); //#追加
}

と、スッキリした形で関数の追加ができる。


あるいは"拡大率を入れる、特別なsetSize"という関数を作ってもいい。

this.star = tm.app.Sprite("CAT");
this.star.scaleSetSize = function() {this.setSize(this.width * this.scaleX , this.height * this.scaleY);} // #追加
this.addChild(this.star);
if (key.getKey("z"))  { 
	this.star.scaleX += 0.1;
	this.star.scaleY += 0.1;
	this.star.scaleSetSize(); // #追加
}

(scaleSetSize の中でsetSizeを行うので、特に外に持ち出すものがない。なのでreturnもいらなくなった)


関数宣言(追加)という、改造に便利な武器を、理解できた。


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


次回:デフォルトから一本のゲームを完成させる1.オブジェクトを作る - tmlibの練習ブログ