当たり判定(矩形と矩形) 『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行目で矩形を描いています。
2009 年 3 月 4 日 水曜日 【 カテゴリー: HSP3 , サンプル 】

