スポンサードリンク
« »


当たり判定(矩形と矩形) 『HSP3』

2009 年 3 月 4 日 水曜日  【 カテゴリー: HSP3 , サンプル


今回は矩形2つの当たり判定をみていきます。黒矩形と青矩形の2つがあり、青矩形は固定にし黒矩形を動かします。黒矩形と青矩形が重なった場合のみ、青矩形の色を赤に変化させます。黒矩形はカーソルで動かしますが、動作処理は「カーソルで図形を動かす」を参考にしてください。

●使用関数・命令
screen boxf repeat cls stick if

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
blackX = 50:blackY = 50  ;黒矩形の座標
blueX = 100 :blueY = 100 ;青矩形の座標
repeat
cls
;黒矩形表示
boxf blackX, blackY, blackX+20, blackY+20
;当たり判定サブルーチンへ
gosub *hit_judgment
;青矩形表示
boxf blueX, blueY, blueX+20, blueY+20
;カーソルキー操作
stick key,15
if key=128 : end
if key&1 : blackX = blackX - 5 ;左移動
if key&4 : blackX = blackX + 5 ;右移動
if key&2 : blackY = blackY - 5 ;上移動
if key&8 : blackY = blackY + 5 ;下移動
await 50
loop
;■当たり判定処理
*hit_judgment
color 0,0,255
if (blackX+20) > blueX AND blackX < (blueX+20) AND (blackY+20) > blueY AND blackY < (blueY+20){
color 255,0,0
}
return

6行目と10行目で2つの矩形を描いています。6行目は黒色固定ですが、10行目の矩形は直前の当たり判定の結果により青色と赤色に分かれます。今回は当たり判定処理を「*hit_judgment」サブルーチン化しました。

では「当たり判定」の条件を詳しくみていきます。座標ですが各矩形の左上を基準にしています。
横移動についてみていきます。青矩形は固定で黒矩形が左から右へ移動している場合を考えてみます。当たっている状態とは上図の②の場合です。黒矩形の右端(blackX+20) より 青矩形の左端(blueX) が左(座標が小さい)になければなりません。等式で書くと次のようになります。青矩形の左端が右だと①のようになります。
■(blackX+20) > blueX
次に、黒矩形の左端(blackX)より青矩形の右端(blueY+20)は右になければなりません。等式で書くと次のようになります。青矩形の右端が左だと③のようになります。
■blackX < (blueX+20)
縦の動きについても同様なことがいえます。
■(blackY+20) > blueY
■blackY < (blueY+20)

以上4つの条件を満たした場合のみ2つの矩形が重なっています。この条件を記述している箇所が23行目になります。22行目で基本は青色に設定しておいて、23行目の条件を満たした場合のみ24行目で赤に変更しています。「return」はサブルーチンの呼ばれた直後に戻るので9行目に戻ります。そして設定した色に従って10行目で矩形を描いています。


にほんブログ村 IT技術ブログ Webサイト構築へ
にほんブログ村
【WEBサイト構築・プログラムブログ】
ランキング参加中!よろしければ「クリック」お願いします。
にほんブログ村 IT技術ブログ プログラム・プログラマへ
にほんブログ村
2009 年 3 月 4 日 水曜日  【 カテゴリー: HSP3 , サンプル

コメントをどうぞ

※管理者による確認後に表示されます。表示までしばらくお待ちください。





デジもの通販