ニンテンドーDSのタイルグラフィックで奇妙なストライピング
-
13-09-2019 - |
質問
私は、ニンテンドーDS用のピンポンゲームに取り組んでいます。私は物事をセットアップするlibndsを使用していると私は非常に奇妙な行動に遭遇しました。これまでのところ、展示この動作を、私は唯一のエミュレータでそれを試してみたが、私は、3つの異なるものを使用し、それらはすべてので、私は悪い何かをやっている疑います。
実際の問題は、私は私のタイル張りのグラフィックの背景レイヤー1以上を使用する場合、私はすべてのその層の上に奇妙なストライプを得るということです。私は背景レイヤー0を使用している場合、問題は消えるが、それが最後にレンダリングされているので、私は実際に私がしたい、他の層にその上に描画することはできません。
私のセットアップコード:
void pong::setup_engine()
{
// Setup DS graphics engine.
// -------------------------
videoSetMode(MODE_5_2D | DISPLAY_BG0_ACTIVE | DISPLAY_BG1_ACTIVE | DISPLAY_BG2_ACTIVE);
vramSetBankA(VRAM_A_MAIN_BG_0x06000000);
vramSetBankB(VRAM_B_MAIN_BG_0x06020000);
u8 *tileMemory = reinterpret_cast<u8 *>(BG_TILE_RAM(1));
u16 *mapMemory = reinterpret_cast<u16 *>(BG_MAP_RAM(0));
int bg0 = bgInit(1, BgType_Text8bpp, BgSize_T_256x256, 0, 1);
int bg1 = bgInit(2, BgType_Bmp16, BgSize_B16_256x256, 0, 0);
//bgScroll(bg0, 256, 256);
u16 *ptr = bgGetGfxPtr(bg1);
for (int y = 10; y < 128*60; y++)
{
ptr[y] = 0xFFFF;
}
BG_PALETTE[1] = grey0;
BG_PALETTE[2] = grey1;
BG_PALETTE[3] = grey2;
BG_PALETTE[4] = grey3;
BG_PALETTE[5] = grey4;
BG_PALETTE[6] = grey5;
BG_PALETTE[7] = grey6;
// 32 here is not 32 bytes but 32 half-words, which is 64 bytes.
swiCopy(CORNER_TILE, tileMemory, 32);
swiCopy(TOP_TILE, tileMemory + 64, 32);
swiCopy(SIDE_TILE, tileMemory + (64 * 2), 32);
swiCopy(MAIN_TILE, tileMemory + (64 * 3), 32);
swiCopy(MAP, mapMemory, 32*24);
}
は、上記のコードでは、私は私のタイル張りのグラフィック層であるBG0、用レイヤ1を使用します。これは奇妙な縞模様が見えます。私はこのような0に変更した場合に予想されるとして、それが現れます。
int bg0 = bgInit(0, BgType_Text8bpp, BgSize_T_256x256, 0, 1);
任意のアイデア何の問題が発生し、どのような解決策はありますか?
解決
background.hでbreifの外観は、あなたがBG1とBG2を使用しているように見えます。モード5のために記載の
http://nocash.emubase.de/gbatek.htmする
レイヤー0と1が正常であり、図2及び図3は、拡張されています。私は手段を拡張するもの知りません。あなただけの通常のタイルのものをしたい場合、あなたはおそらく、0と1ではない1と2をbgInitしたい。
あなたは意志で周りの優先順位を変更することができ、レイヤー0はBGxCNTレジスタ(BG0CNT、BG1CNT、...)と優先度ビットを見てなど、1の上に、必ずしもではありません。優先順位が同点の場合は今、[はい層数は勝利者を決定します。
他のヒント
2つのこと。私がDSが最後devのやったので、しばらくしているが、一つには、ストライピングは、最も可能性が高いVRAMの競合です。あなたのグラフィックや、あなたのタイルデータをコピーしているダブルチェック。モード5は、彼らが特定の方法で初期化している場合と全く同じ挙動をしなければならない2つの文字の背景を、使用していますので、私はそこに何が起こっているかわかりません。
いずれにせよ、あなたは、なぜちょうど彼らのz順序を入れ替えるために彼らのレジスタにその優先順位を設定しないで動作する2つの背景を持っているので?背景のみのデフォルトのことで、特定の順序で描画されている、あなたは、システムが、好きな順番でそれらを描く持っている彼らの優先順位を設定することができます。