Мусор в верхней части экрана при отображении текста поверх изображения в devkit pro

В настоящее время я использую 16-битный libnds (Whith devkitpro) в качестве основы и пытаюсь отобразить текст и фоновое изображение png на одном экране (в этом примере это верхний сценарий). У меня похожая проблема, как эта почта.

У меня есть мусор в верхней части экрана (только еслиconsoleInit(...) называется), похоже на первую проблему в потоке. Единственная проблема заключается в том, что я отображаю фоновое изображение другим способом, поэтому исправления, сделанные в этом потоке, к этому не относятся.

Все, что я ищу, — есть ли способ исправить мусор в верхней части экрана. Если есть более эффективный / лучший способ отображения изображения, я готов принять его, просто я не нашел достаточно подробного руководства о том, как загрузить изображение в качестве фона без использования этого метода. Любая помощь будет оценена. Я отвечу на любые дальнейшие вопросы, которые у кого-то есть о том, что не работает.

Вы можете найти проект прилагается здесь.

1

Решение

Извините за долгую задержку, но есть несколько проблем с вашим кодом. Во-первых, в режиме 4 единственным фоном, который можно настроить как 16-битное растровое изображение, является уровень 3. http://answers.drunkencoders.com/what-graphics-modes-does-the-ds-support/

Затем все слои совместно используют один фрагмент фоновой памяти, и ваш мусор исходит от того, что вы перезаписываете часть растрового изображения в видеопамяти символами для шрифта и картой для фона консоли. Простое решение состоит в том, чтобы переместить растровое изображение, установив его основание карты на 1. Это смещает его в графической памяти на 16 КБ, что оставляет 16 КБ места для вашего текстового слоя (это работает только потому, что мы не можем отобразить все изображение 256×256 на экране одновременно, так как разрешение DS в 256x256x2 байта заполняет весь банк памяти A … чтобы быть более точным, мы должны назначить другой банк памяти для основного фона … но так как мы не можем видеть нижние 70 или около того строк пикселей нашего Во всяком случае, это нормально, что они не совсем попали в видеопамять).

В libnds также есть макрос для упрощения поиска памяти для вашего фона, называемый «bgGetGfxPtr (id)», который после установки установит указатель на ваш фоновый gfx в видеопамяти, так что вам не придется пытаться вычислить его с помощью смещение от BG_GFX.

Все изменения в вашем коде должны выглядеть так (я добавил версию этого кода в faq кода libnds: http://answers.drunkencoders.com/wp-admin/post.php?post=289&Действие = редактировать&Сообщение = 1)

int main(void) {//Top screen pic init
videoSetMode(MODE_4_2D);
vramSetBankA(VRAM_A_MAIN_BG);
int bg = bgInit(3, BgType_Bmp16, BgSize_B16_256x256, 1,0);
decompress(drunkenlogoBitmap, bgGetGfxPtr(bg), LZ77Vram); //Displays/decompresses top image

//videoSetMode(MODE_4_2D);
consoleInit(0,0, BgType_Text4bpp, BgSize_T_256x256, 4,0, true, true);
iprintf("\x1b[1;1HThe garbage is up here ^^^^^.");
iprintf("\x1b[21;1HTesting the text function...");

while(1) {
swiWaitForVBlank();
scanKeys();
if (keysDown()&KEY_START) break;
}
return 0;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]