Forums Logo

Здравствуйте Гость ( Вход | Регистрация )

[ Каскадный ] · Стандартный · Линейный

> Tiled backgrounds, Непонятки какие-то возникают

ElVovan
post Пятница, 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, чтоб на экране правильно всё отображалось в соответствии с номером указанного тайла?


--------------------
user posted image
user posted image
user posted image
user posted image
user posted image
user posted image
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Posts in this topic
ElVovan   Tiled backgrounds   Пятница, 15 июня 2007, 22:43
Puyo Puyo   for(int i=0;i<32*32;i++){ *(u16*...   Суббота, 16 июня 2007, 11:28


Reply to this topicStart new topic
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
 

Упрощённая версия Сейчас: Чт., 10 июля 2025, 22:33
Skin Designed (c) by Rooq.net, All Rights Reserved.