スプライトを表示させてみる
BGの重ね合わせが上手くいったので、今度はスプライトを表示させてみました。
主人公バッキーのパターンはオブジェクトアトリビュートメモリ(OAM)のレジスタを操作する事で、上下左右反転表示が出来る為、6パターン必要な所を3パターン登録するだけで、表現が可能となります。
おまけで、アイスブロックと金塊(2色)も表示してみました。
この2つのキャラクタは、スプライトで表示させる事を予定していましたが、考えてみると、背景キャラと同じ座標上に存在し、表示させるか消去するかで動かないと言う事で、BGキャラクタとして後で表示させる事になりました。
よく見ると、2枚のBGの重ね合わせの上にスプライトパターンが表示されているのが、わかると思います。
BGとスプライトを表示出来た事で、グラフィック関係はほぼ完了しました。
スプライト移動のタイミングをv-blankで
スプライトを表示させても、動かさなければ意味がありません。
スプライトの移動は、OAMの座標レジスタの内容を書き換える事で、瞬時に移動が可能なのですが、そこで書き換えるタイミングが重要になってきます。
どういう事かと言うと、書き換えるタイミングを一定にし、かつ画面表示中出は無い時に書き換えなければ、スムーズにキャラクタを動かす事が出来ないのです。
これを無視して書き換えると、ものすごいスピードで動き、画面が乱れて(一瞬崩れたように)表示されてしまいます。
そこで、垂直帰線期間(v-blank)という画面を左上から1ライン事に線画し、一番下のラインの右を線画して始めに戻る間の時間に書き換える事で、画面の乱れを無くし、一定のタイミングで動かせるようになります。
v-blankのタイミングは、GBAのハードウェアに割り込み機能として備わっており、それを利用する事で実現します。
また、動きを十字キーによって反応する様にしようと、キー入力レジスタを調べる事でどのキーが押されているかを知り、スプライトをその情報に合わせて動かすようにしてみました。
割り込みやキー入力を使うにあたって、前にも書いたムック「Linuxから目覚めるぼくらのゲームボーイ!」がとても参考になりました。
|