プチコン3号 4日目 背景をスクロールさせる

昨日はスプライトを動かしてみましたが、今日はRPGでよくあるような、主人公を中央に固定して背景をスクロールさせるプログラムを作ってみました。

プチコン3号には背景用グラフィックス(以下BG)のための命令が数多く備わっています。
スプライトとBGがあれば、2Dのゲームの画像表示そのもので悩むことはほぼ無いのではないかと思います。

今回はBGを以下のように使います。

pc4-1.png

まず、スクリーンの3倍の大きさのBGを用意します。
そして、スプライトはスクリーン中央に固定し、スクリーン全体をBGの上で移動させます。
すると、結果的にスプライトがBGの上を移動しているように見えることになります。

ただし、画面の端からはみ出さないように気をつけなければなりません。
移動範囲はスクリーンの2倍、Xが0から799まで、Yが0から480までとなります。
それ以上動かすと、BGの外側の何もない部分が見えてしまいます。

pc4-2.png

実際に作ってみたプログラムは以下の通りです。
基本的には、前回と同じプログラムで、スプライトを動かす代わりにBGを動かしているだけです。
他に、最初にBGに絵を描いている処理が増えています。

pc4-0.jpg

X=400:Y=240:Z=500
DZ=0
SPSET 0,506
SPOFS 0,184,104,Z
BGSCREEN 0,75,45
BGFILL 0,0,0,74,44,684
BGFILL 0,11,6,63,38,574
BGPUT 0,37,22,246
@LOOP
STICK OUT DX,DY
X=X+DX*8
IF X>800 THEN X=800
IF X<0 THEN X=0 Y=Y-DY*8 IF Y>480 THEN Y=480
IF Y<0 THEN Y=0 IF DZ==0 THEN DZ=16 AND BUTTON(2) Z=Z-DZ IF Z<-200 THEN DZ=-DZ IF Z>500 THEN DZ=0:Z=500
BGOFS 0,X,Y,500
S=1.0+(500-Z)/500
SPSCALE 0,S,S
VSYNC 1
GOTO @LOOP

まず最後から5行目の「BGOFS」命令ですが、これはSPOFS同様、指定した番号のBGのX,Y,Zの値を指定します。
XとYは、スクリーンの原点(左上)が、BG上でどの座標にあるかを表します。

Xが大きくなると、スクリーンはBGの上を右へ移動していきます。
そのとき3DSの画面上では、BGの画像が右から左へとスクロールしているように見えることになります。

BGSCREEN 0,75,45

はBGの大きさを指定しています。
プチコン3号はBGを4枚持っており、最初に番号でBGを指定します。今回は0番です。
大きさは、16ピクセル単位での指定となります。横75だと、75*16=1200ピクセルとなります。

BGFILL 0,0,0,74,44,684

は、BGの中の四角形の領域を、指定した画像で塗りつぶします。
領域の座標は、やはり16ピクセル単位での指定となります。

画像と番号との対応は、スプライトと同じくSmileツールの中で確認できます。
今回は、0番のBGの全体を684番の画像で塗りつぶしています。
684番の画像は、下の画面で言うと四角のコンクリートのような画像です。

BGFILL 0,11,6,63,38,574

も同じ命令ですが、画像は574番で、これは草地の画像です。
これでスプライトが移動できる範囲を塗りつぶしています。
その次の

BGPUT 0,37,22,246

は画像を1つ(16×16ピクセル)だけ描く命令です。
BGの中央に、246番の「家」の画像を描いています。

pc4-3.png

コメント