在nds的子屏幕上绘制图像
问题描述:
我对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;
}
答
在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;
}