Chapter.37 背景を破壊できるように修正
[Chapter37 制作物]

今回は、前回作成した背景を破壊できるように修正していきます。

■背景の破壊
sca_screen_buffer から、自機弾の位置にある背景パーツを読み取ることで、破壊できる背景かどうか判断
することにします。
sca_screen_buffer は、パターンネームテーブルと同じですから、キャラクタ単位(テキスト座標系)です。

自機弾はグラフィック座標系で管理されています。
一方で、背景パーツは、テキスト座標系です。
テキスト座標系の幅1 は、グラフィック座標系で 幅8 と等価です。
この分解能の違いを吸収するために、座標系変換の演算を施す必要があります。

自機弾のグラフィック座標は、自機弾情報から SCA_INFO_XH, SCA_INFO_YH を読み取れば取得できます。
ここから、テキスト座標に変換するには、(SCA_INFO_XH/8, SCA_INFO_YH/8) という演算を施します。8で割るだけですね。

次に、sca_screen_buffer に背景パーツの情報が記録されているので、テキスト座標→sca_screen_bufferアドレス の変換
が必要になります。
パターンネームテーブルは、1行が 32 の幅を持っているのですが、sca_screen_buffer は、いろいろ節約のために1行 24
の幅にしてあります。
また、背景パターンが記憶されているのは、sca_screen_buffer から 576 ずらした位置です。
従って、アドレスに変換するためには、

(sca_screen_buffer + 576) + SCA_INFO_XH/8 + SCA_INFO_YH/8 * 24

ということになります。
ここで、/8 * 24 は、約分できますが、/8 によって下位3bitが失われることを期待しているので、約分して演算を簡単に
する場合は、下位3bit を 0 に置き換える演算が必要です。

(sca_screen_buffer + 576) + SCA_INFO_XH/8 + (SCA_INFO_YH & 0xF8) * 3

こんな感じですね。* 3 は、かけ算ですが、3回足しても良いし、* (2+1) に分解して、シフト1回したものと、シフトしてない
ものとを足しても良いです。今回は、後者を採用します。







工事中






今回は、前回に比べて簡単な修正ですみました。
次回は、ボスのあたり判定など、細かい修正を済ませてしまおうと思います。

[▲トップページへ]