tmlibの練習ブログ

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

デフォルトから一本のゲームを完成させる8.背景のループの仕組みを考える

前回ではスクロールで流れる背景を作った。
しかしこのままでは、画像1枚で流れてしまう。
画像が永久に流れるようにしたい。


そこで画像がループする仕組みを考えてみよう。
色々方法はあるかも知れないが、私が考えたのは、以下のやり方。


f:id:superchineseland:20131202174327p:plain


まず背景画像を2枚用意する。
1枚は画面にすっぽりと表示し、2枚めはその上にピッタリと付けて置く。
そして2枚とも下に同時に動かす(スクロールさせる)


1枚めが画面下に見切れていくほど、2枚めは画面上からせり入っていく形。
そして、1枚めが完全に見えなくなってしまった時…(2枚めの全体がすっぽりと表示された時でもある)
1枚めはすぐさま2枚めの後ろへ移動する(初めに2枚めが居た位置だ)


同様に2枚めにも、この処理を行う。2枚めが画面下から出たら、また画面上に戻る。
1枚目は画面内におり、再びその上にぴったりと付く形。
この仕組みを導入すれば無事、背景が途切れる事なく流れ続けるのではないだろうか。


さっそくこの方法を試してみたい…だが背景が2枚だからといって、

// 1枚め
this.back1 = tm.app.Sprite("BACK");
this.back1.origin = tm.geom.Vector2(0.0, 0.0);
this.back1.scroll_move = function(){
	this.y += userData.speed;
}
this.addChild(this.back1);


// 2枚め
this.back2 = tm.app.Sprite("BACK");
// ..省略
this.addChild(this.back2);

みたいに、同じ文が続くのはまた、スマートではない。


ならばmakeLabelみたいな作成する関数を作る…? と言いたい所だが、そもそも今回は、それぞれが独立して動くラベルとは違う。
今回は"画像こそ2枚並べるが、その2枚で一つの背景"…という位置づけだ。
画像としてはそれぞれ Sprite で表示するが、実際には2つをまとめて処理しないと、背景ループと呼べる処理にならない。


こうした場合は、2つの変数を一つの"配列"にしてまとめてると、処理しやすく、見た目に関係性も分かってスマートになる。


という訳で少し回り道して、"配列"というものを勉強しよう。


次回:デフォルトから一本のゲームを完成させる9.配列とは - tmlibの練習ブログ