2024年03月17日
Laboratoryテーマ??7「水平ライン4枚(MSX2は8枚)を超えてSPRITEを表示させたい」その?B
Laboratoryテーマ??7「水平ライン4枚(MSX2は8枚)を超えてSPRITEを表示させたい」その?Bです。
これも例えば、表スプライトアトリビュートテーブル(&H1B00)表示中に、裏スプライトアトリビュートテーブル(&H1C00)を書き換え、裏の書換えが終わったところで、表裏のスプライトアトリビュートテーブルのアドレスを書き換える(ページングと呼ばれる手法。)など、いくつかの方法があります。
しかし、シャッフルしながらVRAMへ転送をかけていると、タイミング取りの「NOP」の余り時間が無駄になり積み重なるとそれなりの無駄時間になります。
そこで、私のやり方は仮想スプライトアトリビュートテーブル(&HC900)とは別に、シャッフル用の仮想スプライトアトリビュートテーブル(&HC980)をもう一個用意します。
仮想スプライトアトリビュートテーブルからシャッフル用仮想スプライトアトリビュートテーブルに、メモリ上でシャッフル処理を行い、シャッフルした結果をニーモニックでいうところの「OTIR」命令(連続転送)でVRAM上のスプライトアトリビュートテーブルに一括転送します。
VRAMを扱うのはこの一括転送時のみ、シャッフル処理もメモリ間で行うため、早いです。
ただ、128バイト余分にメモリを消費します。
メモリに余裕があるゲームを作るならこちらがお奨めです。
メモリがない時は、上記ページングでやるしかないかな?
これで綺麗に表示されるようになりました。
このロジックを走査線割込みの中に組み込めば、普通にゲームを作るだけでSPRITEが水平方向に5枚以上並べば勝手に点滅してくれます。
1/60毎に毎回128バイトVRAMへ転送しているとは思えない速度ですよね。
走査線割り込みを使用したサンプルプログラムです。
「SPRITE.BAS」【 ダウンロード 】
戦闘機を動かす部分、スペースバーで全機止まります。
BASIC部です。
これで、横スクロールアクションも作れるようになりました。
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/12427827
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック