【问题标题】:Drawing an image on subscreen of nds在 nds 的子屏幕上绘制图像
【发布时间】:2011-07-21 14:41:34
【问题描述】:

我对 libdns 完全陌生。我尝试更改示例 Graphics\Backgrounds\256_color_bmp 在子屏幕上显示背景。

这是我的代码。您知道在子屏幕上显示 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;
}

【问题讨论】:

    标签: nintendo-ds libnds devkitpro


    【解决方案1】:

    mode 5 中,DS 有 3 个背景层可用,使用 2 调用 bgInit 会返回对同一屏幕上不同层的引用。如果要在子屏幕上使用图层,请使用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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多