Предисловие.
С каждой статьей, проект все усложняется и усложняется, и когда-нибудь, он перерастет в полноценную игру. Но представьте, что в огромном коде игры на 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.
Внимание: эмулятор BlastEm виснет при вызове KLog функций.
Теперь, запустите и подвигайте камеру (убедитесь что дебаг включен)
Работает как часы. Но что, если нужно вывести число u32 или f8?
Если SGDK у вас установлен на диск C, то пройдите по данной ссылке: file:///C:/SGDK/doc/html/tools_8h.html
Вы обнаружите лучший источник информации по SGDK (аналог ZDoom wiki). В котором, подробно описаны все функции.
Выбирайте функцию по душе.
Данный способ отладки используйте осторожно, т.к. Gens KMod не вылетает, если вы накосячили с указателями.
Получаем счетчик 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));
Скомпилируйте и запустите.
Так то лучше.
Заключение.
В этой статье я рассказал минимум информации по дебагу, если её окажется недостаточно, я дополню статью. В любом случае, данный материал будет очень полезен, при отладке коллизии.