|
Здравствуйте Гость ( Вход | Регистрация ) Доступ из РоссииДля сохранения достпа из России к сайту и форуму GBX
|
||||||||||||||||||||
![]() ![]() ![]() |
Tiled backgrounds, Непонятки какие-то возникают
| ElVovan |
Пятница, 15 июня 2007, 22:43
Отправлено
#1
|
![]() Фанат ![]() ![]() ![]() Группа: Пользователи Сообщений: 118 Регистрация: 02 мая. 2007 Из: Санкт-Петербург Пользователь №: 22 080 ![]() ![]() |
CODE #include<nds.h> #include<string.h> u8 redTile[64] = { 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,2,2,1,1,1, 1,1,1,2,2,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1 }; u8 greenTile[64] = { 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, 2,2,2,1,1,2,2,2, 2,2,2,1,1,2,2,2, 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2 }; int main(){ REG_POWERCNT = POWER_ALL_2D; DISPLAY_CR = MODE_0_2D | DISPLAY_BG0_ACTIVE; BG0_CR = BG_32x32 | BG_COLOR_256 | BG_MAP_BASE(0) | BG_TILE_BASE(1); VRAM_A_CR = VRAM_ENABLE | VRAM_A_MAIN_BG; BG_PALETTE[1] = RGB15(31,0,0); BG_PALETTE[2] = RGB15(0,31,0); memcpy((void*)BG_TILE_RAM(1), redTile, 64); memcpy((void*)(BG_TILE_RAM(1)+64), greenTile, 64); for(int i=0;i<32*32;i++){ (*(unsigned char*)(void*)(BG_MAP_RAM(0)+i))=i%2; } return(0); } Простейший пример, по задумке на экране должны отображаться в шахматном порядке красные и зелёные квадратики с зелёными и красными точками соответственно. В самом начале задаём вышеупомянутые квадратики переменными redTile и greenTile, далее начинается функция main, в самом начале инициализируем необходимый видеорежим. Далее устанавливаем палитру, у нас всего два цвета: красный и зелёный. Тут всё просто BG_PALETTE[1] = RGB15(31,0,0); BG_PALETTE[2] = RGB15(0,31,0); Далее копируем наши квадратики в область памяти, отвечающую за tile set, у нас всего два тайла, каждый занимает по 64 байта, первый (красный с зелёной точкой) копируем в первые 64 байта, второй (зелёный с красной точкой) - сразу за ним: memcpy((void*)BG_TILE_RAM(1), redTile, 64); memcpy((void*)(BG_TILE_RAM(1)+64), greenTile, 64); Вроде всё просто (Tile Set - Collection of 1024 tiles numerically ordered from 0 to 1023.), первый квадратик имеет номер ноль, второй - номер один. Далее циклом заполняем ,,карту'', величина i%2 имеет значение либо 1 либо 0 в зависимости от чётности i, в этом цикле карта по-идее должна в шахматном порядке заполняться красными и зелёными квадратиками. Но этого почему-то не происходит, она заполняется только красными квадратиками с зелёными точками. Причём какие бы я значения не подставлял, оно всё-равно заполняется красными квадратиками, даже если указан номер несуществующего тайла (то есть два и больше). Может кто может подсказать как правильно заполнять tile map, чтоб на экране правильно всё отображалось в соответствии с номером указанного тайла? -------------------- |
| Puyo Puyo |
Суббота, 16 июня 2007, 11:28
Отправлено
#2
|
|
Фанат ![]() ![]() ![]() Группа: Пользователи Сообщений: 103 Регистрация: 01 июля 2006 Пользователь №: 16 904 ![]() ![]() |
CODE for(int i=0;i<32*32;i++){ *(u16*)(void*)(BG_MAP_RAM(0)+i*2)=i%2; } К видео чипу (VRAM, OAM, палетты) можно "обращаться" только(!) в 16 или 32 битной форме. Записи в тайловую карту состоят из 2 байт на тайл. -------------------- ![]() |
![]() ![]() |
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
| Упрощённая версия | Сейчас: Ср., 28 окт. 2026, 08:27 |




Пятница, 15 июня 2007, 22:43

















