プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7...
TRANSCRIPT
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/1
プチコンで横スクロールシューティングゲームを作る(3)
●敵がミサイルを発射する
前回までで、敵をビームでうつ、敵が
自機に当たるとミスになる、という基
本的なシューティングゲームの仕組
みができました。
今のままだと敵が全く攻撃してこない
ので、敵がミサイルをうってくるように
してみましょう。
★ミサイルの設定
プログラムの最初で、ミサイルのスプライトなどを設定します。
基本的に、敵の設定と同じです。
ミサイルのスプライトは、1322番を使います。
1 ‘*** SHOOT8 ***
(中略)
33 ‘--- テキ ---
(中略)
37 SPCOL 11,0,0,16,16
38
39 ‘--- ミサイル ---
40 MS=0
41 SPSET 21,1322
42 SPHOME 21,4,4
43 SPCOL 21,-4,-4,8,8
44 SPHIDE 21
45
46 ‘--- ジキヲ ウゴカス ---
47 @MOVELOOP
ミサイルが存在するかどうかの変数。最初は 0
ミサイルのスプライトを
管理番号 21番で設定
最初はミサイルが発射されていないので、表示しない
タイトルを「SHOOT8」にする
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/2
★ミサイルを発射する
続いて、自機を動かすループのプログラムを改造します。
乱数を使って、ある確率でミサイルを発射するサブルーチンを呼ぶようにします。
「RND(100)<2」として、ミサイルが発射される確率は 2%にしています。
ミサイルが既に画面にある時(MSが 1の時)は、発射しません。
また、敵が画面にいない時も、ミサイルを発射しません。
プログラムの最後に、ミサイルを発射するサブルーチンを追加します。
プログラムを実行してみましょう。
敵がミサイルを発射します。
ただし、発射されるだけでそれ以上
は動きません。
ミサイルを動かすプログラムを、まだ
作っていないからです。
122
123 ‘--- ミサイル ハッシャ ---
124 @MISLFIRE
125 MS=1
126 MX=TX
127 MY=TY
128 MDX=RND(4)-2
129 MDY=RND(4)-2
130 SPOFS 21,MX,MY
131 SPSHOW 21
132 RETURN
コメント
ラベル
ミサイル存在変数を 1にする
ミサイルの座標 MX,MYを、敵の座標 TX,TYから設定
ミサイルのスプライトを座標(MX,MY)へ
ミサイルのスプライトを表示
46 ‘--- ジキヲ ウゴカス ---
(中略)
56 IF RND(100)<1 AND TK==0 THEN GOSUB
@TEKIDERU
57 IF TK==1 THEN GOSUB @TEKIMOVE
58 IF RND(100)<2 AND MS==0 AND TK==1
THEN GOSUB @MISLFIRE
59 VSYNC 1
60 GOTO @MOVELOOP
2%の確率で、かつミサイルが画面に無く、
かつ敵が登場していたら、ミサイルを発射
するサブルーチンを呼ぶ
ミサイルの移動量 MDX,MDYを-2~2の乱数で設定
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/3
★ミサイルを動かす
発射されたミサイルを動かすプログラムを作りましょう。
自機を動かすループプログラムで、ミサイルが存在している時は、ミサイルを動かすサブル
ーチンを呼ぶようにします。
ミサイルが存在している(MSが 1)の時だけ、ミサイルを動かすサブルーチンを呼びます。
プログラムの最後に、ミサイルを動かすサブルーチンを追加します。
プログラムを実行してみましょう。
発射されたミサイルが移動して、画面のはじまで行くと
消えます。
ミサイルが消えると、また次のミサイルが発射されま
す。
また、自機にミサイルが当たるとミスになります。
46 ‘--- ジキヲ ウゴカス ---
47 @MOVELOOP
(中略)
58 IF RND(100)<2 AND MS==0 AND
TK==1 THEN GOSUB @MISLFIRE
59 IF MS==1 THEN GOSUB @MISLMOVE
60 VSYNC 1
61 GOTO @MOVELOOP
もしミサイルが存在していたら、
ミサイルを動かすサブルーチンを呼ぶ
134
135 ‘--- ミサイル イドウ ---
136 @MISLMOVE
137 MX=MX+MDX
138 MY=MY+MDY
139 SPOFS 21,MX,MY
140 IF MX<0 OR MX>399 THEN MS=0:SP
HIDE 1
141 IF MY<0 OR MY>239 THEN MS=0:SP
HIDE 1
142 IF SPHITSP(0,21)==1 THEN GM=1
143 RETURN
コメント
ラベル
ミサイルの座標 MX,MYを、MDX,MDYだけ移動
ミサイルのスプライトを座標(MX,MY)へ移動
ミサイルが画面をはみだしたら消す
ミサイルが画面をはみだしたら消す
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/4
★ミサイルの動きを改善する
今のプログラムだと、ミサイルが勝手な方向へ発射されるので、怖くありません。
また、乱数によってはミサイルが停止した状態になるので、いつまでもミサイルが消えません。
ミサイル発射サブルーチンを、以下のように改造します。
プログラムを実行してみましょう。
ミサイルが自機へ向かって発射さ
れます。
ここでは逆三角関数「ATAN」(ア
ークタンジェント ) 、三角関数
「COS」(コサイン)と「SIN」(サイン)
を使っています。
三角関数は高校の数学で、逆三
角関数は大学の数学で習います。
図に描くと右のようになりますが、
難しいので説明しません。
★プログラムを「SHOOT8」の名前で保存しましょう。
SAVE ”SHOOT8”
124 ‘--- ミサイル ハッシャ ---
125 @MISLFIRE
126 MS=1
127 MX=TX
128 MY=TY
129 MA=ATAN(TY-PY,TX-PX)
130 MDX=-COS(MA)
131 MDY=-SIN(MA)
132 SPOFS 21,MX,MY
133 SPSHOW 21
134 RETURN
ミサイルの移動量 MDX,MDYを
自機へ向かうように設定
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/5
●ビームを連射する
これまでのプログラムでは、ビーム・敵・ミ
サイルなどが全て 1 個ずつしか画面上に
存在できません。
まず、ビームの数を増やして、連射できる
ようにしましょう。
ビームをいくつも増やして、それぞれ動かすには、
ビームのスプライト管理番号
ビームの存在変数 BM
ビームのx座標変数 BX
ビームのy座標変数 BY
などを、ビームの個数分だけ管理しなければいけません。
そのために、配列変数(はいれつへんすう)を使います。
配列変数は、「[」「]」(中かっこ)で番号が付いた変数です。
例 A[0] A[1] A[2] …それぞれ別の変数として扱われる。
この配列変数を使って、それぞれのビームを管理します。
今回は配列変数を 1~3 まで用意して、3発まで連射できるようにします。
●ビーム 1 個目
スプライト管理番号 1
ビームの存在変数 BM[1]
ビームの x座標 BX[1]
ビームの y座標 BY[1]
●ビーム 2 個目
スプライト管理番号 2
ビームの存在変数 BM[2]
ビームの x座標 BX[2]
ビームの y座標 BY[2]
●ビーム 3 個目
スプライト管理番号 3
ビームの存在変数 BM[3]
ビームの x座標 BX[3]
ビームの y座標 BY[3]
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/6
プログラムの最初の、ビームの設定をする部分で、配列変数を使って 3 個分の設定をします。
配列変数を使うには、まず DIM(ディム、ディメンジョン)命令で、配列の個数を指定します。
DIM BM[4] ,BX[4] ,BY[4] …
配列の個数 配列の個数 配列の個数
配列の個数 配列変数として使う個数を指定する。
配列の番号は「0」から始まるので、最大番号は「個数-1」になる。
例えば、BM[4]と指定すると、BM[0]~BM[3]が使える。
3 個分の配列変数を設定するために、FOR(フォー)・NEXT(ネクスト)命令を使って、設定プ
ログラムを 3個分くり返します。
FOR B=1 TO 3 STEP 1
ループ変数
の初期値
終値 増分
ループ変数の初期値 くり返しの中で変化させる変数(ループ変数)の最初の値。
終値 ループ変数の最後の値。
増分 ループ変数を変化させる値。
STEP以下を省略すると 1ずつ増やす。
NEXT
FOR で始まったくり返し部分の最後。ループ変数が終値になっていなければ FOR まで戻る。
1 ‘*** SHOOT9 ***
(中略)
25 ‘--- ビーム ---
26 DIM BM[4],BX[4],BY[4]
27 FOR B=1 TO 3
28 BM[B]=0
29 SPSET B,1305
30 SPHOME B,4,8
31 SPROT B,90
32 SPHIDE B
33 SPCOL B,-8,-4,16,8
34 NEXT
35
36 ‘--- テキ ---
ビーム存在変数を配列にする。0を設定。
ビームのスプライト
(管理番号 B番)を設定
変数 Bを変化させてくり返し
タイトルを「SHOOT9」にする
変数 Bを 1~3までくり返し
配列変数を 0~3まで 4個設定
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/7
今回は、ループ変数 B を 1,2,3 にして 3 回くり返して、ビームのスプライトなどを 3 個分設定
しています。
次に、自機を動かすループで、ビームを 3個分処理するようにします。
ビーム発射・ビーム移動サブルーチンは、配列変数を使ってB番目のビームを処理します。
49 ‘--- ジキヲ ウゴカス ---
(中略)
56 SPOFS 0,PX,PY
57
58 FOR B=1 TO 3
59 IF (BUTTON(2) AND 16)==16 AND
BM[B]==0 THEN GOSUB @BEAMFIRE:B=3
60 NEXT
61
62 FOR B=1 TO 3
63 IF BM[B]==1 THEN GOSUB @BEAMMOVE
64 NEXT
65
66 IF RND(100)<1 AND TK==0 THEN
GOSUB @TEKIDERU
わかりやすくするため、1行空ける
わかりやすくするため、1行空ける
わかりやすくするため、1行空ける
Bを 1~3までくり返し
Bを 1~3までくり返し
ビームを 1個発射したら
くり返しを終わる
88 ‘--- ビーム ハッシャ ---
89 @BEAMFIRE
90 BM[B]=1
91 BX[B]=PX+16
92 BY[B]=PY
93 SPOFS B,BX[B],BY[B]
94 SPSHOW B
95 RETURN
96
97 ‘--- ビーム イドウ ---
98 @BEAMMOVE
99 BX[B]=BX[B]+8
100 SPOFS B,BX[B],BY[B]
101 IF BX[B]>400 THEN BM[B]=0:SPHIDE B
102 IF SPHITSP(B,11)==1 THEN GOSUB @
BEAMTEKIHIT
103 RETURN
B番目のビームを発射する
B番目のビームを移動
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/8
ビームと敵が当たった時のプログラムも、B番目のビームを消すようにします。
プログラムを実行してみましょう。
ビームが 3発まで連射できるようになりま
す。
配列の個数や、それぞれの FOR~NEXT のくり返し数を変えると、ビームが連射できる数が
変わります。いろいろ試してみましょう。
★プログラムを「SHOOT9」の名前で保存しましょう。
SAVE ”SHOOT9”
123 ‘--- ビーム・テキ ヒット ---
124 @BEAMTEKIHIT
125 BM[B]=0
126 SPHIDE B
127 TK=0
128 SPANIM 11,3,10,1376,10,1377,
10,1378,10,1379,10,32,1
B番目のビームを消す
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/9
●敵の数を増やす
配列変数を使って、ビームが連射で
きるようになりました。
同じように配列変数を使って、敵とミ
サイルの数を増やしてみましょう。
まずは敵を 3機に増やします。
プログラムの最初、敵の設定で、配列変数を設定します。
敵の配列変数は 14個設定していますが、実際は 11~13番の 3個しか使いません。
(スプライトの管理番号に合わせています)
1 ‘*** SHOOT10 ***
(中略)
36 ‘--- テキ ---
37 DIM TK[14],TX[14],TY[14]
38 FOR T=11 TO 13
39 TK[T]=0
40 SPSET T,1210
41 SPHOME T,8,8
42 SPCOL T,-8,-8,16,16
43 SPHIDE T
44 NEXT
45
46 ‘--- ミサイル ---
敵存在変数を配列にする。0を設定。
敵のスプライト
(管理番号 T番)を設定
Tを変化させてくり返し
タイトルを「SHOOT10」にする
Tを 11~13までくり返し
配列変数を 14個設定
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/10
次に、自機を動かすループで、敵を 3機分処理するようにします。
ビーム移動サブルーチンで、それぞれの敵との当たり判定をするようにします。
104 ‘--- ビーム イドウ ---
105 @BEAMMOVE
106 BX[B]=BX[B]+8
107 SPOFS B,BX[B],BY[B]
108 IF BX[B]>400 THEN BM[B]=0:SPHIDE B
109 FOR T=11 TO 13
110 IF SPHITSP(B,T)==1 THEN GOSUB @
BEAMTEKIHIT
111 NEXT
112 RETURN
113
114 ‘--- テキ トウジョウ ---
53 ‘--- ジキヲ ウゴカス ---
(中略)
66 FOR B=1 TO 3
67 IF BM[B]==1 THEN GOSUB @BEAMMOVE
68 NEXT
69
70 FOR T=11 TO 13
71 IF RND(100)<1 AND TK[T]==0 THEN
GOSUB @TEKIDERU
72 NEXT
73
74 FOR T=11 TO 13
75 IF TK[T]==1 THEN GOSUB @TEKIMOVE
76 NEXT
77
78 IF RND(100)<2 AND MS==0 AND
TK[11]==1 THEN GOSUB @MISLFIRE
79 IF MS==1 THEN GOSUB @MISLMOVE
わかりやすくするため、1行空ける
とりあえず 11番の敵からミサイル発射 (※あとで直します)
Tを 11~13までくり返し
Tを 11~13までくり返し
わかりやすくするため、1行空ける
1~3番目の敵とそれぞれ当たり判定
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/11
敵登場サブルーチンも、配列変数をTで指定しながら、各機の処理をします。
敵の移動・ビームとの当たり処理サブルーチンも、配列変数で各機の処理をします。
114 ‘--- テキ トウジョウ ---
115 @TEKIDERU
116 TK[T]=1
117 TX[T]=391
118 TY[T]=RND(208)
119 SPOFS T,TX[T],TY[T]
120 SPSHOW T
121 SPANIM T,3,10,1210,10,1211,10,1212,0
122 RETURN
124 ‘--- テキ イドウ ---
125 @TEKIMOVE
126 TX[T]=TX[T]-2
127 SPOFS T,TX[T],TY[T]
128 IF TX[T]<0 THEN TK[T]=0:SP
HIDE T
129 IF SPHITSP(0,T)==1 THEN GM=1
130 RETURN
131
132 ‘--- ビーム・テキ ヒット ---
133 @BEAMTEKIHIT
134 BM[B]=0
135 SPHIDE B
136 TK[T]=0
137 SPANIM T,3,10,1376,10,1377,10,
1378,10,1379,10,32,1
138 SC=SC+10
139 LOCATE 0,0
140 PRINT ”SCORE ”;SC
141 RETURN
T番目の敵の処理をするように変更
T番目の敵の処理をするように変更
T番目の敵の処理をするように変更
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/12
ミサイル発射サブルーチンは、とりあえず 1機目の敵からミサイルを発射するようにします。
(※あとで直します)
プログラムを実行してみましょう。
敵が 3機登場するようになります。
143 ‘--- ミサイル ハッシャ ---
144 @MISLFIRE
145 MS=1
146 MX=TX[11]
147 MY=TY[11]
148 MA=ATAN(TY[11]-PY,TX[11]-PX)
149 MDX=-COS(MA)
150 MDY=-SIN(MA)
151 SPOFS 21,MX,MY
152 SPSHOW 21
153 RETURN
ミサイルを 1機目(11番)の
敵から発射するように設定
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/13
●ミサイルの数を増やす
敵と同じように、配列変数を使ってミサイルの数を 3発まで増やしてみましょう。
プログラムの最初、ミサイルの設定部分で、配列変数を使って設定します。
配列変数は 0~23番で設定しますが、実際は 21~23番の 3個しか使いません。
次に、自機を動かすループで、ミサイルを 3発分処理するようにします。
82行では、ミサイルのループ変数Mが 21~23、敵の管理番号が 11~13番なので、敵の存
在変数を「TK[M-10]」と指定しています。
56 ‘--- ジキヲ ウゴカス ---
(中略)
77 FOR T=11 TO 13
78 IF TK[T]==1 THEN GOSUB @TEKIMOVE
79 NEXT
80
81 FOR M=21 TO 23
82 IF RND(100)<2 AND MS[M]==0 AND
TK[M-10]==1 THEN GOSUB @MISLFIRE
83 NEXT
84
85 FOR M=21 TO 23
86 IF MS[M]==1 THEN GOSUB @MISLMOVE
87 NEXT
88
89 VSYNC 1
90 IF GM==0 THEN GOTO @MOVELOOP
46 ‘--- ミサイル ---
47 DIM MS[24],MX[24],MY[24] ,MDX[24],
MDY[24]
48 FOR M=21 TO 23
49 MS[M]=0
50 SPSET M,1322
51 SPHOME M,4,4
52 SPCOL M,-4,-4,8,8
53 SPHIDE M
54 NEXT
55
56 ‘--- ジキヲ ウゴカス ---
配列を 24個(0~23番)設定
21~23番の変数とスプライトを設定
わかりやすくするため、1行空ける
Mを 21~23までくり返し
Mを 21~23までくり返し
わかりやすくするため、1行空ける
わかりやすくするため、1行空ける
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/14
ミサイルの発射・移動サブルーチンも、配列変数を使ったプログラムに変更します。
プログラムを実行してみましょう。
ミサイルも 3 発まで出るようになりま
す。
★プログラムを
「SHOOT10」の名前で
保存しましょう。 SAVE ”SHOOT10”
155 ‘--- ミサイル ハッシャ ---
156 @MISLFIRE
157 MS[M]=1
158 MX[M]=TX[M-10]
159 MY[M]=TY[M-10]
160 MA=ATAN(TY[M-10]-PY,TX[M-10]
-PX)
161 MDX[M]=-COS(MA)
162 MDY[M]=-SIN(MA)
163 SPOFS M,MX[M],MY[M]
164 SPSHOW M
165 RETURN
166
167 ‘--- ミサイル イドウ ---
168 @MISLMOVE
169 MX[M]=MX[M]+MDX[M]
170 MY[M]=MY[M]+MDY[M]
171 SPOFS M,MX[M],MY[M]
172 IF MX[M]<0 OR MX[M]>399 THEN
MS[M]=0:SPHIDE M
173 IF MY[M]<0 OR MX[M]>239 THEN
MS[M]=0:SPHIDE M
174 IF SPHITSP(0,M)==1 THEN GM=1
175 RETURN
M 番目のミサイルを M-10番の
敵から発射するように設定
M番目のミサイルを移動
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/15
●敵の動きを変える
敵の動きがただ真っ直ぐ飛んでくるだけなので、動き方を変えてみましょう。
まず、プログラムの最初の敵の設定で、新しい配列変数 TY0[]を設定します。
敵の登場・移動サブルーチンで、動きを変えます。
プログラムを実行してみましょう。敵が上下にカーブしながら飛んできます。
1 ‘*** SHOOT11 ***
(中略)
36 ‘--- テキ ---
37 DIM TK[14],TX[14],TY[14],TY0[14]
38 FOR T=11 TO 13
126 ‘--- テキ トウジョウ ---
127 @TEKIDERU
128 TK[T]=1
129 TX[T]=391
130 TY0[T]=RND(208)
131 TY[T]=TY0[T]+50*SIN(TX[T]/50)
132 SPOFS T,TX[T],TY[T]
133 SPSHOW T
134 SPANIM T,3,10,1210,10,1211,10,1212,0
135 RETURN
136
137 ‘--- テキ イドウ ---
138 @TEKIMOVE
139 TX[T]=TX[T]-2
140 TY[T]=TY0[T]+50*SIN(TX[T]/50)
141 SPOFS T,TX[T],TY[T]
142 IF TX[T]<-16 THEN TK[T]=0:SPHIDE 11
143 IF SPHITSP(0,T)==1 THEN GM=1
144 RETURN
TY0 と SIN関数を使って y座標を設定
タイトルを「SHOOT11」にする
配列変数 TY0[]を追加
TY0 と SIN関数を使って y座標を設定
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/16
●自機をスライドパッドで操作する
これまで自機の操作は十字キーだけでしたが、スライドパッドでも操作で
きるようにしてみましょう。斜めの動きがやりやすくなります。
自機を動かすループで、スライドパッドの操作を読み取るプログラムを追
加します。
プログラムを実行してみましょう。
自機をスライドパッドで操作できます。
スライドパッドの操作を読み取るには、
STICK OUT(スティックアウト)命令を使います。
STICK OUT SX ,SY
横方向の
スライド量
変数
縦方向の
スライド量
変数
横方向のスライド量変数 横方向のスライド量を格納する変数。返る値は-1~+1。
縦方向のスライド量変数 縦方向のスライド量を格納する変数。返る値は-1~+1。
★プログラムを「SHOOT11」の名前で保存しましょう。
SAVE ”SHOOT11”
56 ‘--- ジキヲ ウゴカス ---
(中略)
62 IF (B AND 8)==8 AND PX<384 THEN PX
=PX+2
63 STICK OUT SX,SY
64 PX=PX+SX*2.5
65 PY=PY-SY*2.5
66 IF PX<16 THEN PX=16
67 IF PX>384 THEN PX=384
68 IF PY<16 THEN PY=16
69 IF PY>224 THEN PY=224
70 SPOFS 0,PX,PY
スライドパッドを読み取って
自機の座標 PX,PYを変える
はみ出しチェック
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/17
●背景を表示する
これまで真っ暗な背景でゲームを作ってきましたが、背景を表示してみましょう。
まず、画面下に地面を表示してみます。
プログラムを実行してみましょう。
画面下に地面が表示されます。
プチコンでは、背景(BG=バックグラウンド)にいろいろな BGキャラ(16×16 ドット)を表示で
きます。
57行で、BGSCREEN(ビージースクリーン)命令で背景レイヤーの大きさを設定しています。
BGSCREEN 0 ,50 ,15
BGレイヤー
番号
横方向の
大きさ
縦方向の
大きさ
BGレイヤー番号 0~3で指定。
横方向の大きさ BGレイヤーの横方向サイズ(キャラ単位で指定。25で横いっぱい)
縦方向の大きさ BGレイヤーの縦方向サイズ(キャラ単位で指定。15で縦いっぱい)
1 ‘*** SHOOT12 ***
(中略)
46 ‘--- ミサイル ---
(中略)
54 NEXT
55
56 ‘--- ハイケイ ---
57 BGSCREEN 0,50,15
58 FOR X=0 TO 49
59 BGPUT 0,X,14,334
60 NEXT
61
62 ‘--- ジキヲ ウゴカス ---
63 @MOVELOOP
背景スクリーンの大きさを設定
BG スクリーンの左下~右下に
地面の BGパーツを置く
タイトルを「SHOOT12」にする
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/18
あとで横にスクロールさせたいので、横 2画面分のサイズの BGレイヤーを設定しています。
58~60 行では、BGPUT(ビージープット)命令で、BG レイヤーに地面の BG キャラ(334 番)
を横に 50個並べて表示しています。
BGPUT 0 ,X ,14 ,334
BG レイヤー
番号
x座標 y座標 キャラ
番号
BGレイヤー番号 0~3で指定。
x座標 キャラを置く位置の x座標(キャラ単位で指定)。
y座標 キャラを置く位置の y座標(キャラ単位で指定)。
キャラ番号 表示したい BGキャラの番号。
BGキャラの番号を変えると、地面のキャラが変わります。
いろいろ試してみましょう。
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/19
★背景のスクロール
今表示させた地面を、横にスクロールさせて動かしてみましょう。
最初の設定部分で、BG レイヤーの原点の x座標を表す変数 BGXを追加します。
自機を動かすループの最後で、背景をスクロールするサブルーチンを呼びます。
プログラムの最後に、背景をスクロールするサブルーチンを追加します。
プログラムを実行してみましょう。
背景の地面がスクロールして動きます。
56 ‘--- ハイケイ ---
57 BGSCREEN 0,50,15
58 FOR X=0 TO 49
59 BGPUT 0,X,14,334
60 NEXT
61 BGX=0
62
63 ‘--- ジキヲ ウゴカス ---
64 @MOVELOOP
BG レイヤーの原点 x座標。最初は 0。
63 ‘--- ジキヲ ウゴカス ---
(中略)
99 FOR M=21 TO 23
100 IF MS[M]==1 THEN GOSUB @MISLMOVE
101 NEXT
102
103 GOSUB @BGSCROLL
104 VSYNC 1
105 IF GM==0 THEN GOTO @MOVELOOP
背景をスクロールするサブルーチンを呼ぶ
193
194 ‘--- ハイケイ スクロール ---
195 @BGSCROLL
196 BGX=BGX+1
197 IF BGX>399 THEN BGX=0
198 BGOFS 0,BGX,0
199 RETURN
上田市マルチメディア情報センター
プチコンで横スクロールシューティングゲームを作る(3)/20
背景のスクロールには、BGOFS(ビージーオフセット)命令を使っています。
BGレイヤーの中で、どの部分を画面に表示するか、位置を指定する命令です。
BGOFS 0 ,BGX ,0
BG レイヤー
番号
表示位置
x方向
変化量
表示位置
y方向
変化量
BGレイヤー番号 0~3で指定。
表示位置
x方向変化量
BG レイヤー中で、画面に表示する位置を x 方向
にずらす量(ドット単位で指定)。
表示位置
y方向変化量
BG レイヤー中で、画面に表示する位置を y 方向
にずらす量(ドット単位で指定)。
197行で BGXの値を 1増やし、199行の BGOFS命令で表示位置を 1 ドット右へずらしてい
ます。
そのままだと表示エリアが BGレイヤーの右はじを突きぬけてしまうので、198行で BGXを元
にもどしています。
197行の BGXの変化量を変えると、背景スクロールの速さが変わります。
いろいろ試してみましょう。
★プログラムを「SHOOT12」の名前で保存しましょう。
SAVE ”SHOOT12”