二十九歩目 あたり判定2
では今回は ちょっと当たり判定から外れて画像をやります
シューティングゲームのように 矢印のボタンを押すと絵が動く というのをやってみましょう
その前に絵が必要だから十七歩 絵の取り入れにある あのへたな絵を使いますのでね
まずは 絵を表示する方法を忘れた人がいるのではないでしょうか?
忘れた人は 二十七歩と二十八歩を読みなおしてくださいφ(@@)
ではまず 絵の取り入れからいくぞー
buffer 2 ;仮想画面 ID2を作る picload "zyuunana-1.bmp";画像をロードする gsel 0,1 ;ウインドウ0を 描画先にする gcopy 2 ;ID2のウインドウから 今の描画先へ画像を転送する stop ;止まる |
これはOKだよな でも一応説明しとくか
buffer 2で 仮想画面(パソコンの画面に出てこないウインドウ)のID2を作る
picload "zyuunana-1.bmp" は zyuunana-1.bmpというファイルを
今の描画先(または描画ウインドウという)にロードする
この場合 仮想画面ID2に描かれる
gsel 0,1 でウインドウID0のウインドウを描画先に指定しています
だから今度からprint
命令なんかで描かれるものは
すべてウインドウ0に描かれます
gcopy 1 でID2のウインドウ(ID2の仮想画面)に表示されている
画像(この場合zyuunana-1.bmpが描かれている)
今の描画先のウインドウへ転送します
つまりzyuunana-1.bmpがウインドウ0に描かれます
stop で止まります
とまぁ これでウインドウ0に絵が描かれますが
移動はしてくれませんね どうすれば良いでしょうか?
まず繰り返さないといけませんね 画像を動かすんですから
それからgetkeyやstickで キーが押されているかチェックもしないとね
でキーが押されていたら画像を動かすようにしよう
ではまず繰り返して画像を表示するところから↓
buffer 2 ;仮想画面 ID2を作る picload "zyuunana-1.bmp";画像をロードする gsel 0,1 ;ウインドウ0を描画先にする repeat ;繰り返しの始め redraw 2 ;画面には描画しない color 0,0,0:boxf ;黒で画面を塗りつぶす gcopy 2 ;ID2のウインドウから 今の描画先へ画像を転送する redraw 1 ;一気に描画 wait 1 ;待つ loop ;repeatヘ戻る |
はぁ・・・はぁ・・・ なんか疲れたなぁ 最近ちょっといそがしくて・・・・・というのはうそです
さぁ説明には入ろう
repeat で繰り返しの始めだな
redraw 2 でココからredraw 1が実行されるまで画面には何も表示されなくなる
color 0,0,0:boxf で 黒で画面を塗りつぶします
gcopy 2 でID2のウインドウに描かれているものを 今の描画先(ウインドウ0)に
転送する
redraw 1 でredraw 2で描かれなかった部分を一気に描画する
wait 1 で待って
loop でrepeatヘ戻る
これで パチパチ無しでへたなロケットが真っ黒なウインドウの左上に
ちょこんとさびしく映ってるな
よし 次はそのロケットの位置を矢印のキーを押すことで
移動するようにしよう
buffer 2 ;仮想画面 ID2を作る picload "zyuunana-1.bmp";画像をロードする gsel 0,1 ;ウインドウ0を描画先にする repeat ;繰り返しの始め redraw 2 ;画面には描画しない color 0,0,0:boxf ;黒で画面を塗りつぶす stick key,1+2+4+8 ;keyという変数に 押されているキー番号を入力 if key=1:x=x-5 ;keyが1だったらxから5を引いてxに入力 if key=2:y=y-5 ;keyが2だったらyから5を引いてyに入力 if key=4:x=x+5 ;keyが4だったらxから5を足してxに入力 if key=8:y=y+5 ;keyが8だったらyから5を足してyに入力 pos x,y ;x,yの位置に gcopy 2 ;ID2のウインドウから 今の描画先へ画像を転送する redraw 1 ;一気に描画 await 1 ;待つ loop ;repeatヘ戻る |
ただ画像を動かすだけなのに 長いプログラムだなぁ・・・
さぁせつめいじゃ ほっほっほっほっ
stick key,1+2+4+8 は keyという変数に押されているキーのキー番号を
入力してくれますが 前にstickの紹介をした時に言った通り
stick はキーが押された瞬間だけしかキー番号を変数に入れてくれないので
keyの後ろに ずーっと押されている間は押されてるキーのキー番号を
変数に入れ続けるように そうしてほしいキー番号を書きます
この場合 1と2と4と8(矢印のキーの番号)ですので それぞれ足した数字を書いときます
これで矢印キーはどれも 押されている間は ずーっとキー番号が変数に入りつづけます
if
達で それぞれキーが押されたら 押されたキーによって
変数を足したり引いたりします
例えば 上向きの矢印キーを押したら Xの変数から5を引く とか
pos x,y で横はx 縦はy の座標に画像がロードできるようにします
つまりこの位置がロケットの位置になるのです
もちろんxとyはキーを押すことによって増えたり減ったり つまり
ロケットが上に行ったり 右へ行ったりと動きます
await 1 はwait 1ではロケットの動きが ぎこちないので ちょっと速くしたのです
どうです? なんとなくかっこいいと思うのは 僕だけでしょうね・・・多分・・・
でもこれが シューティングゲームの基本のようなもんじゃよ
とある人・・・「最近 俺の登場が少なくねぇか?」
オヤブン・・・「そうか?」
とある人・・・「ギャラ(出演料)くれーーーー」
オヤブン・・・「他の仕事さがしな」
とある人・・・「就職難で・・・うう・・・家には女房二人に子供が一人・・・」
オヤブン・・・「浮気かよ!」