2011-03-23 45 views
4

我對libdns完全陌生。我嘗試更改示例Graphics \ Backgrounds \ 256_color_bmp 以在子屏幕上顯示背景。在nds的子屏幕上繪製圖像

這是我的代碼。你有什麼想法缺少在子屏幕上顯示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; 
} 

回答

2

mode 5的DS具有3個背景圖層可用的,並且調用bgInit與2返回相同的屏幕上的參考到一個不同的層。如果要在子屏幕上使用圖層,請使用bgInitSub

也有2個調色板;一個在主屏幕上,另一個在子屏幕上。子屏幕調色板位於BG_PALETTE_SUB

希望這代碼將顯示在第二屏幕上的圖像(標有/* ! */變化):

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; 
}