わかった。私は本質的に、NES ハードウェアの独自の解釈を作成しようとしているので、理想的には NES ゲームがどのように見えるかに似たゲームを作成できます。私は現在、プレイフィールドをビデオメモリ(バックバッファ)に描画する方法を調整する方法にこだわっています。
バックバッファ
NES には、ネームテーブルまたはバックバッファに制限がありました。私の例では、バックバッファのサイズは 256x240 ピクセル、つまり 1 画面のサイズです。これをテレビに描いてみたら、画面いっぱいにぎっしり。ここで、これを X=5 のオフセットで画面に描画すると、画像全体がずれて画面に回り込みます。
例えば.....
ORIGINAL, NO OFFSET: DRAWN WITH OFFSET OF X=5:
ABCDEFGHIJK GHIJKABCDEF
DRAWN WITH OFFSET OF X=-5:
FGHIJKABCDE
画面はそれぞれ 8x8 ピクセルの正方形に分割され、合計 32x30 行と列になります。(256x240 ピクセル)。オフセットは、列ではなくピクセルで表されます。したがって、理論的には、画面を 5 ピクセルずらすことができ、すべての列が 5 ピクセルだけ右にシフトされます。
レベルの設計
私のステージは、16x15 の行と列 (それぞれ 16x16 ピクセル) で表されるデータを含む画面で構成されています。これは、いくつの NES ゲームがレベル データを格納したかをエミュレートするためのものです。各タイルには、各 8x8 ブロックに何が含まれるべきかに関する情報が保持されます。
例えば:
AA
BC with A,B,C,D representing what 8x8 graphic should go where
レベル デザインもこれで表されます。各番号は異なる画面であり、- は何も意味せず、null です。
-----
-123-
---4-
--54-
-----
キャラクターの配置 これは簡単です。文字の絶対位置に基づいて、文字がどのテーブル、行、および列に基づいているかを判断する方法は既に知っています。画面内の相対的な位置も判断できます。
この情報を使用すると、文字の左右にどの列があるかを簡単に把握できます (文字が画面 1 の左側にある場合、赤は左にはありません)。
ここに質問があります DUN DUN DUN どうすれば自分のレベルを画面に描画して、あるレベルから次のレベルにスクロールできますか。一度に 1 つの画面全体を描画するのは比較的簡単で、キャラクターが端に来たら別の画面に切り替えるだけです。
ただし、私が概念的に抱えている問題は、レベル データを画面に「ストリーミング」する必要があることです。つまり、キャラクターが右に 24 ピクセル移動するとします。BGも移動する必要があります。
そのため、バックバッファのスクロールを 24 ピクセル調整する必要があります。ただし、スクロールするだけで画面がオーバーラップし、レベルの古い部分が表示されます。そのため、スクロール中にレベルの新しい部分をバック バッファーに描画する必要があります。しかし、それを行う前に、最初に描画する必要があるタイルを特定する必要があります。人が左に 24 ピクセル移動した場合は、タイルをバックバッファーに再描画し、それに応じてオフセットも変更する必要があります。
また、キャラクターが右に移動し、描画するレベル データがなくなった場合、オフセットはなく、代わりにキャラクターが画面の端に近づくことを忘れないでください ( X 軸)。
基本的に、私は今、頭の中にたくさんの異なる数字と値が詰まっています. 私がこれにどのようにアプローチできるかについて、誰にも見通しがありますか?
編集: VB.Net を使用します。C#も適用可能です(私は両方でプログラムしています)