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

Breakout #10 - Bricks - Pico-8 Hero PICO-8
Breakout #10 - Bricks - Pico-8 Hero

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

前回はこちら

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

Breakout #10 – Bricks – Pico-8 Hero
Breakout #10 – Bricks – Pico-8 Hero

【解説メモ】

パドルが常に画面内に収まっているようにする
FUNCTION UPDATE_GAME() 内の PAD_X+=PAD_DX と NEXTX=BALL_X+BALL_DX の間に、PAD_X=MID(0,PAD_X,127-PAD_W) を記述

FUNCTION STARTGAME()内に BRICK_X=5 BRICK_Y=20 BRICK_W=4 BRICK_H=2 を記述

FUNCTION DRAW_GAME() 内の RECTFILL(PAD_X,PAD_Y,PAD_X+PAD_W,PAD_Y+PAD_H,7) の後ろに RECTFILL(BRICK_X,BRICK_Y,BRICK_X+BRICK_W,BRICK_Y+BRICK_H,14) を記述し、ブロックデータからブロックを描画

実行してみると、ブロックが小さすぎるので、BRICK_W=13 BRICK_H=4 に変更

FUNCTION STARTGAME()内のブロック情報に、BRICK_V=TRUE を追加する(VはVisible:見える)

FUNCTION UPDATE_GAME()内のパッドとボールの衝突チェックの後に、
IF BRICK_V AND BALL_BOX(NEXTX,NEXTY,PAD_X,PAD_Y,PAD_W,PAD_H) THEN 〜 ENDを記述

実行してみると、ボールがブロックになかなか当たらないので、BRICK_X=60に変更

一度衝突するとスコアが加算され、それ以後当たるとすり抜けるようになる
ブロックがボールに当たったら、ブロックを消すためRECTFILL()命令を IF BRICK_V THEN 〜 ENDで囲む(存在した場合だけ描画)

テーブルの説明とFOR文の使い方について説明

FUNCTION STARTGAME() 内の BRICK_X={} BRICK_Y={} BRICK_V={} を記述

FUNCTION STARTGAME() と FUNCTION SERVEBALL() の間に、FUNCTION BUILDBRICKS() を記述、FUNCTION STARTGAME() 内の BRICK_X={} BRICK_Y={} BRICK_V={} を消して、こちらへ移して、元の場所には BUILDBRICKS() を実行する

FUNCTION DRAW_GAME() 内に FOR文を使って、IF BRICK_V[I] THEN 〜 ENDで、存在するブロックのみ描画を全てのブロックに対応するように書く

また、この全てのブロックに対応する命令をコピーして、FUNCTION BUILDBRICKS() 内にペーストして、当たり判定を全てのブロックに対してチェックするようにする

FUNCTION BUILDBRICKS() 内にて、FOR I=1, 10に変更、BRICK_W+2に変更

【自分の感想】

ブロックは複数で存在するため、テーブルで管理する

テーブル内のブロックに対して1つずつチェックを行うときには、FOR文を使う(ボールに当たったか? 存在するため描画するか?)

ボールの反射から、ブロックに対しての当たり判定を実装させ、ブロック崩しらしくなった

コメント

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