【8】いっしょにまなぼう!

Breakout #8 - Final Collision - Pico-8 Hero PICO-8
Breakout #8 - Final Collision - Pico-8 Hero

TeamworkCastが配信している、PICO-8のチュートリアル動画の解説を連載中です。

前回はこちら

そして今回の動画はこちらになります。

Breakout #8 – Final Collision – Pico-8 Hero

【解説メモ】

前回作った、テストプログラム(動画の概要欄からリンクあり)から、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関数の具体的な使い方を知らなかった)

コメント

タイトルとURLをコピーしました