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