TeamworkCastが配信している、PICO-8のチュートリアル動画の解説を連載中です。
前回はこちら。
そして今回の動画はこちらになります。
【解説メモ】
前回作った、テストプログラム(動画の概要欄からリンクあり)から、DEFLX_BALL関数をコピー&ペーストで持ってくる
ボールの次のフレームでの衝突チェックを行う為、_UPDATE関数の中ではじめにLOCAL修飾子を付けて、NEXTXとNEXTYを記述
壁との衝突判定の前にある
BALL_X+=BALL_DX を NEXTX=BALL_X+BALL_DX
BALL_Y+=BALL_DY を NEXTY=BALL_Y+BALL_DY
に変更
そしてBALL_BOX(〜)〜END の後に
BALL_X=NEXTX
BALL_Y=NEXTY
を記述
壁との衝突チェックの
BALL_X を NEXTX
BALL_Y を NEXTY
に変える
それと、THENの所にNEXTXとNEXTYの値が0〜127に収まるように、
NEXTX=MID(0,NEXTX,127)
NEXTY=MID(0,NEXTY,127)
を記述
BALL_BOX()の最初の引数
BALL_X を BX
BALL_Y を BY
に変更
BALL_BOX()の実行の引数に NEXTX と NEXTY を追加(BX と BY に対応)
BALL_BOX() 内の IF 〜 THENを1行にまとめる
IF BALL_BOX(〜) THEN の中に IF DEFLX_BALL_BOX(〜) 〜 END を記述
その後にSFX(1)でパドルとボールが当たった音を作り鳴らす
【自分の感想】
ボールの座標変数 NEXTX と NEXTY をつくり、一つ先のフレームでの位置を知ることで、当るかどうかがわかる
IF BALL_BOX(〜) THEN の中に IF DEFLX_BALL_BOX(〜) 〜 END を記述して、はじめのBALL_BOX(〜)でパドルとボールのあたりを判定して、当たった場合 更にDEFLX_BALL_BOX(〜)で横に当たったのかをチェックしている
ある一定の範囲に納める場合、今までの私のやり方では、
IF 変数 > 範囲の最大値 THEN 変数 = 範囲の最大値 END
IF 変数 < 範囲の最小値 THEN 変数 = 範囲の最小値 END
とやっていたが、MID関数を使って、
変数 = MID(範囲の最小値, 変数, 範囲の最大値)
とすれば良いことがわかった(MID関数の具体的な使い方を知らなかった)
コメント