SGDK. Отладка игры (Debug)

Предисловие.

С каждой статьей, проект все усложняется и усложняется, и когда-нибудь, он перерастет в полноценную игру. Но представьте, что в огромном коде игры на 1000 строк кода, появился баг. И что-бы его исправить нужна отладка, т.е. какое-нибудь сообщение, которое сообщит нам, какая строка кода отвечает за баг. Можно обойтись и без отладки, но, сами понимаете, с отладкой проще.

Включаем дебаг.

Что-бы включить дебаг (отладку), необходимо открыть Gens KMod и выбрать Option->Debug.

И поставить галочку на «Active Development Features«

Дебаг включен, посмотреть отладочные сообщения можно в CPU->Debug->Messages. Пока там пусто, но скоро это исправим.

Также, у вас может начать лагать компьютер из-за эмулятора Gens KMod, поэтому закрывайте его сразу после использовнания.

Пишем отладочные сообщения.

Откройте проект из урока SGDK. Перемещаемся по карте.

В main.c замените функцию setCameraPosition на это:

void setCameraPosition(s16 x, s16 y)
{
    if ((x != camPosX) || (y != camPosY))
    {
        camPosX = x;
        camPosY = y;
        MAP_scrollTo(bga, x, y);
		
	KLog_F1("x: ", posX);
	KLog_F1("y: ", posY);
    }
}

Все что я сделал, это добавил дебаг сообщения с координатами x,y.

Функция KLog_F1 принимает строку и fix32 число, и выводит их в CPU->Debug->Messages эмулятора Gens KMod.

Теперь, запустите и подвигайте камеру (убедитесь что дебаг включен)

Работает как часы. Но что, если нужно вывести число u32 или f8?

Если SGDK у вас установлен на диск C, то пройдите по данной ссылке: file:///C:/SGDK/doc/html/tools_8h.html

Вы обнаружите лучший источник информации по SGDK (аналог ZDoom wiki). В котором, подробно описаны все функции.

Выбирайте функцию по душе.

Получаем счетчик FPS.

Что-бы показать FPS, поместите данную строку в свой цикл while.

VDP_showFPS(FALSE);  

FALSE — значит, что число будет целым, в противном случае дробным.

Запустим.

Значение счетчика FPS, скроллится вместе с картой, потому-что счетчик FPS и карта находятся на одном плейне (BG_A). Значит, нужно передвинуть карту на задний слой (BG_B).

В этой строке, я заменил BG_A на BG_B.

bga = MAP_create(&bga_map, BG_B, TILE_ATTR_FULL(0, FALSE, FALSE, FALSE, TILE_USERINDEX));

Скомпилируйте и запустите.

Так то лучше.

Заключение.

В этой статье я рассказал минимум информации по дебагу, если её окажется недостаточно, я дополню статью. В любом случае, данный материал будет очень полезен, при отладке коллизии.

Итоговый результат.