NDSのサブスクリーンに画像を描画します
-
29-10-2019 - |
質問
私はlibdnsにまったく初めてです。サンプルグラフィックス背景 256_color_bmpを変更して、サブスクリーンの背景を表示しようとします。
これが私のコードです。 Subscreenにhey_typbitmapを表示するために何が欠けているのか考えていますか?私はすでにトップ画面に新しい画像を表示することができました。
#include <nds.h>
#include <stdio.h>
#include "drunkenlogo.h"
#include "hey_typ.h"
int main(void)
{
videoSetMode(MODE_5_2D);
vramSetBankA(VRAM_A_MAIN_BG_0x06000000);
videoSetModeSub(MODE_5_2D);
vramSetBankC(VRAM_C_SUB_BG_0x06200000);
int bg3 = bgInit(3, BgType_Bmp8, BgSize_B8_256x256, 0,0);
dmaCopy(hey_typBitmap, bgGetGfxPtr(bg3), 256*256);
dmaCopy(hey_typPal, BG_PALETTE, 256*2);
int bg2 = bgInit(2, BgType_Bmp8, BgSize_B8_256x256, 0,0);
dmaCopy(drunkenlogoBitmap, bgGetGfxPtr(bg2), 256*256);
dmaCopy(drunkenlogoPal, BG_PALETTE, 256*2);
while(1)swiWaitForVBlank();
return 0;
}
解決
の モード5 DSには3つのバックグラウンドレイヤーが利用可能で、呼び出しがあります bgInit
2が同じ画面上の別のレイヤーへの参照を返します。サブスクリーンでレイヤーを使用する場合は、使用してください。 bgInitSub
.
2つのパレットもあります。メイン画面に1つ、サブスクリーンに別の画面があります。サブスクリーンパレットはあります BG_PALETTE_SUB
.
うまくいけば、このコードが2番目の画面に画像が表示されることを願っています(でマークされた変更 /* ! */
):
int main(void)
{
videoSetMode(MODE_5_2D);
vramSetBankA(VRAM_A_MAIN_BG_0x06000000);
videoSetModeSub(MODE_5_2D);
vramSetBankC(VRAM_C_SUB_BG_0x06200000);
int bg3 = bgInit(3, BgType_Bmp8, BgSize_B8_256x256, 0,0);
dmaCopy(hey_typBitmap, bgGetGfxPtr(bg3), 256*256);
dmaCopy(hey_typPal, BG_PALETTE, 256*2);
int bg3sub = bgInitSub(3, BgType_Bmp8, BgSize_B8_256x256, 0,0); /* ! */
dmaCopy(drunkenlogoBitmap, bgGetGfxPtr(bg3sub), 256*256); /* ! */
dmaCopy(drunkenlogoPal, BG_PALETTE_SUB, 256*2); /* ! */
while(1)swiWaitForVBlank();
return 0;
}
所属していません StackOverflow