用SGDK开发世嘉MD游戏:调试篇
本来想直接讲MD游戏开发的部分,但我还是觉得有必要先把调试这部分讲一下
由于世嘉MD属于上古时代的游戏主机,那时候的开发环境非常非常的恶劣,是我们今天难以想象的恶劣,虽然SGDK已经做的非常人性化,但还是难以跟现代的游戏引擎(比如unity、unreal、godot cocos还是算了吧,这玩意儿纯属一坨大便)相对比,在现代游戏引擎中调试是比较直观的,且不说编辑器中预览了,就是打印输出也是很舒服的,在 SGDK 中并不能打印输出,是根本没有 printf 这样的功能的,需要借助 GensKMod 这款模拟器才能打印输出,虽然可以用【在屏幕上绘制文字】的方式打印输出调试信息,但还是很难受,世嘉MD屏幕那么小,显示不了几行字,一旦需要查看大量信息就显得很笨拙,因此,GensKMod 模拟器可以说是开发MD游戏必备,要不然我不能保证你会不会疯掉,我反正是会疯掉。所谓工欲善其事必先利其器,如果没有趁手的调试工具,写起代码来未免有点盲人摸象的意思,到底代码运行起来是什么样的咱心里也没有数,即使有点数也并没有很踏实。所以我就把调试这篇文章放到前面讲了。
用 GensKMod 调试代码并不需要额外的配置,编译出游戏rom之后直接用模拟器打开就可以查看调试信息了,至于怎么编译游戏rom,上一篇有讲过,这里就不再赘述了。
这一篇我简单讲一下怎么在 GensKMod 模拟器中打印输出 Hello World。
代码如下:
#include <genesis.h>
int main()
{
//这句就是在 GensKMod 模拟器中打印输出,就一句代码,很简单
KLog("Hello World");
while (TRUE)
{
VDP_waitVSync();
}
return 0;
}
KLog开头的函数还有一些其他的,自己可以尝试着写一写,看看都是些什么功能。
以上只是一句 Hello World,只是一个字符串,要是输出整型或者浮点数类型怎么办呢?也不难,看代码:
#include <genesis.h>
// 这个数是314,写成二进制的形式
int32_t number = 0b000100111010;
int main()
{
KLog("Hello World");
// 除以100,也就是3.14,这里输出是3.13,精度丢失了一点,影响不大
// 世嘉MD是没有浮点数这个概念的,不像现在直接可以写float、double这些类型,
// 取而代之的是fixed类型,就是定点数,用定点数表示小数,运算速度更快,效率更高
fix32 test = intToFix32(number) / 100;
// 这里是SGDK内置的32位定点数除法函数,跟上面直接除以100得出的结果是一样的,
// 不过我还是推荐用内置的这个除法运算,内置的应该是效率更高
fix32 pi = fix32Div(intToFix32(number), intToFix32(100));
KLog_F1("test = ", test);
KLog_F1("pi = ", pi);
while (TRUE)
{
VDP_waitVSync();
}
return 0;
}
代码写完了,编译游戏rom。
打开 GensKMod 模拟器,在菜单栏找到Option,里面有一项是 Debug,这是设置 Debug 的地方,找到 Active Development Features 并打勾,点 OK 按钮确认修改并关闭设置界面。
打开 rom,在菜单栏找到CPU,CPU菜单下有一个Debug选项,Debug里边有一个Messages,点开就是了,KLog 函数打印输出的信息都会显示在这里,就好像C语言中的 Printf,C# 中的 Console.WriteLine。
标签:MD,GensKMod,游戏,打印输出,世嘉,SGDK,调试 From: https://www.cnblogs.com/sangerge/p/17049079.html