二十八歩目 あたり判定
では今回は あたり判定をしたいと思います
あたり判定とは 画面上で何かと何かが あたったかどうか
確かめることです シューティングゲームなんかでは
ミサイルと敵があたったかどうか あたり判定を使ってるよ
〜あたり判定〜
あたり判定は命令じゃないんだ ifを使って作るんだ
ちょっとやってみましょう
repeat ;繰り返し color 255,255,255:boxf ;白色で画面を塗りつぶす color 0,0,0 ;描画色を黒にする pos cnt,0 ;X座標cntY座標0に print "あ" ;あ と表示 if cnt>100:stop ;cntが100より大きかったらストップ wait 1 ;待つ loop ;repeatヘ戻る |
これを実行すると あ という文字がだんだん右に動いて行って
しばらくしたら動かなくなると思います
さぁ説明しましょそうしましょ
まずrepeatで繰り返しのはじめだ
次にcolor 255,255,255:boxfでは最初にcolor
255,255,255で描画色を白色にして
それからboxfで画面を描画色 つまりこの場合白色で塗りつぶします
別に
color 255,255,255 boxf |
でも同じ事です 僕は一行にまとめただけなので
次にcolor 0,0,0で描画色を黒にしています もしこれがなかったら
描画色は白のままで あ と言う文字も白のままになってしまうので
描画色を黒にしています
pos cnt,0 これは文字の位置を横はcnt 縦は0の位置にするって事だけど
cntって何か覚えてる?これは繰り返し(repeat〜loop)が行われた
回数がはいってるシステム変数だったよね(思い出せない人はココを見よ)
だから繰り返された数が入るんだからだんだん 0・・・1・・・2・・・
と増えてくね つまりpos cnt,0では だんだん繰り返されるたびに
文字(あ)が 右へ動いてくんだ
print "あ"では あ と言う文字を表示する
if cnt>100:stopでは cntが100より大きくなったら
その右側の命令 つまりstopが実行されるんだ
だから100回以上繰り返しが行われたらstopが実行されて
あ と言う文字が動かなくなるんだ
wait 1とloopはおなじみだね
とこんな感じだよ これがあたり判定さ
つまり あ という文字と100とのあたり判定さ
でもなんか当たったって感じがしないなぁ・・・
それに あ と言う文字もぱちぱちするので 改良---
screen 0,200,200 ;ウインドウ0の大きさを変更 repeat ;繰り返し redraw 2 ;画面には何も描かない color 255,255,255:boxf ;白色で画面を塗りつぶす color 0,255,0:boxf 100,0,200,200 ;緑の壁を作る color 0,0,0 ;描画色を黒にする pos cnt,0 ;X座標cntY座標0に print "あ" ;あ と表示 if cnt>100:stop ;cntが100より大きかったらストップ redraw 1 ;一気に描画 wait 1 ;待つ loop ;repeatヘ戻る |
今度は さっきのやつに緑色の壁(?)を作って
あ が壁に当たると止まるというプログラムです(あ もパチパチしません)
説明
screen 0,200,200はウインドウを横200縦200の大きさにしたのです
redraw 2 と redraw 1 は恒例(こうれい)のやつだな(パチパチ防止策じゃ)
color 0,255,0:boxf 100,0,200,200 は まずcolor 0,255,0は描画色を緑色にします
それからboxf 100,0,200,200で四角の左上が100の0で
右下が200の200まで描画色(今は緑)で四角く塗りつぶしてくれます
実行すると こうなりまあす
ほらね ちゃんと壁ができてるでしょ
でもって あ が右へ動いて壁にぶつかると止まりまーす
でも問題が・・・posでの文字の位置は その文字の左上の座標なんだ
だから つまり文字(あ)の左側が緑色の壁に入る
所で止まっちゃうんだ
こんな感じに
まぁちょっと多めに見てね(;;;;^^;;;;;)
何なら自分でプログラムを書き換えてみてね