用SGDK开发世嘉MD游戏:入门篇
0. github上的wiki教程(推荐英语好的看,英语不好的就看我写的教程吧)
https://github.com/Stephane-D/SGDK/wiki
1. 【安装SGDK(仅针对windows系统)】
-
安装 java 8 或更高版本的 jre
如果已经安装了 jdk 就不需要再单独安装 jre 了,jdk 包含 jre。
jdk 是开发 java 用的,jre 是运行 java 用的,咱们这里只需要运行 java,并不需要开发 java,因此 jre 足够使用。这里我只给出了 64位 jre 下载地址,想要 jdk 的可以自己到 java 官网下载。
64位 jre 下载地址:http://icy.bioimageanalysis.org/upload/jre-8u281-windows-x64.exe
-
下载SGDK
下载完了把 zip 解压到自己喜欢的位置,可以直接解压到 C盘 根目录,也可以解压到 D盘 根目录,我的位置是 E:\Develop\MD\
-
编译测试
win+r 打开运行窗口,输入 cmd 打开终端,运行以下代码进行编译测试:
SGDK_PATH\bin\make -f SGDK_PATH\makelib.gen
【SGDK_PATH】指的是刚才解压的SGDK压缩包的位置。
编译过程中终端窗口会嗖嗖嗖打印出很多很多信息,如果没有出现 Error 这个单词就说明安装成功了,如果有 Error 单词出现,一般会告诉你错误信息,作为一个开发者要学会查看报错信息,我刚才试的时候就出现如下信息了:java -jar E:/Develop/MD/SGDK/bin/rescomp.jar E:/Develop/MD/SGDK/res/libres.res E:/Develop/MD/SGDK/res/libres.rs -dep E:/Develop/MD/SGDK/res/libres.o
E:/Develop/MD/SGDK/bin/sh.exe: java: command not found
make: *** [E:/Develop/MD/SGDK/res/libres.rs] Error 127大体意思就是 java 命令没找到,因为我是在 vscode 中编译的,我刚刚安装了 java,vscode 中的终端还没识别到我刚安装的 java,如果我关闭 vscode 再重新打开 vscode 就不会出现这个报错了,大家用的 win+r 打开的 cmd 终端应该不会出现报错的。
-
小技巧(把SGDK设置成全局环境变量):
如果觉得输入完整的 SGDK_PATH 目录太麻烦(比如 D:\FolderA\FolderB\FolderC\SGDK),可以把 SGDK 目录配置成全局环境变量,具体做法如下(以 win10 系统为例):
依次找到:设置 -> 系统 -> 关于 -> 高级系统设置 -> 环境变量
在系统变量中新建一个系统变量,变量名随便取,我就叫它 SGDK 了,变量值就是你的 SGDK 根目录找到系统变量中的 Path 这一项,点右下角的编辑按钮
然后把 %SGDK% 填进去,两边的%不要忘记,然后一路点确定确定确定就行了,以后就不需要输入完整的 SGDK_PATH路径了,直接以 %SGDK%代替就ok了,以后编译的时候会经常用到的。
2. 【SGDK的用法】
SGDK编译项目用的是自己的makefile,为了项目能被makefile正确识别,需要按以下方式组织项目的文件夹结构(这是必须要遵守的规范):
项目根目录
-
src
src目录(存放源代码文件,子文件夹最多支持2级深度,例如:src/engine/enemy/*) -
inc
inc目录(存放头文件) -
res
res目录(存放资源文件) -
out
out目录(编译输出游戏rom的目录,这个文件夹会自动创建,不需要自己建,自己建也是可以的)
文件类型说明
- 源代码文件可以是 .c(C语言源文件)、.s(68k汇编源文件)或 .s80(z80汇编源文件)
- 头文件可以是 .h(C语言头文件)或者 .inc(汇编头文件)
- 主资源文件应为 .res(由 rescomp 工具编译的资源定义文件,详请参阅 SGDK_PATH/bin/rescomp.txt 文件)
- 其他资源文件可以位于任何位置(虽然但是,还是推荐都放到 res 目录中),你需要在 .res 文件中正确引用其他资源文件,java 会帮助我们编译成SGDK可使用的资源。
- .bmp 图像文件(仅限索引颜色格式)
- .png 图像文件(仅限索引颜色格式)
- .vgm vgm音乐文件(仅限megadrive专用的vgm)
- .xgm xgm音乐文件
- .wav wav音频文件(用来做音效)
- .bin 二进制数据文件
- .c C语言源文件
- .s 68k汇编源文件
makefile支持3种不同的编译模式
- release 正式发布的时候用这个模式,这个模式会对代码做一些优化,这是默认模式。
- debug Gens KMod 模拟器用来调试程序用的模式,详见 GensKMod模拟器调试
- asm 用来生成汇编列表
要编译项目,你需要从项目文件夹中使用以下命令
SGDK_PATH\bin\make -f SGDK_PATH\makefile.gen
但是咱们已经把SGDK设置成全局环境变量了,那么命令就变成如下所示了:
%SGDK%\bin\make -f %SGDK%\makefile.gen
注意 命令最后其实是有一个选项的,就是前面说过的release、debug、asm这些,如果什么都不加默认就是release版本,如果想编译调试版,后面就要加上debug:
%SGDK%\bin\make -f %SGDK%\makefile.gen debug
如果一切正常,在 out 文件夹中应该能看到一个 rom.bin 文件,你可以用MD模拟器加载rom文件运行游戏,或者如果你有烧录卡可以烧录到卡带里实机运行。
3. 【制作第一个MD游戏 - Hello World (以 vscode 为例)】
环境是不是配好了,最好的办法就是亲自写一个hello world,这是程序员圈子里亘古不变的真理,开发世嘉MD游戏也是一样的。
- 安装C/C++扩展
SGDK用的是C语言作为开发语言,也能用汇编语言,但由于我太菜不懂汇编,也就只能用C语言班门弄斧一下了。
vscode 安装 C/C++ 扩展很简单,打开扩展选项卡,直接搜 C/C++ 就能找到,然后安装就完了。
- 新建工程
然后在电脑里随便一个位置新建一个空文件夹,我这里就直接在桌面上建了,文件夹名字就叫 helloworld 吧,然后在 helloworld 文件夹里面新建 src、inc、res 三个空文件夹,也就是前面提到过的工程目录结构的规范。
- 编写代码
在工程根目录(也就是 helloworld 文件夹)下鼠标右键,选择【通过 code 打开】,在 src 目录中新建 main.c 源代码文件,写上以下代码:
#include <genesis.h>
int main()
{
while (true)
{
}
return 0;
}
这几行代码很简单,相信已经成为大家的本能了,唯一要说明的就是
include <genesis.h>
这个头文件是 SGDK 中的头文件,是开发 MD 游戏必须要用到的,genesis 是什么意思呢?是世嘉 MD 美版的名字,美版 MD 就叫 Genesis,有个 MD 模拟器叫 Gens,就是用的美版 MD 的名字。记住这个名字,以后只要写 MD 游戏,首先就要 include 这个头文件。
如上图所示,可能头文件会报错
不用怕,把鼠标放到红线上会弹出一个错误信息框,下面有一个【快速修复】选项,点快速修复
选择【编辑 "includePath" 设置】,找到【包含路径】这一项,
把下面两行路径都加上,下面的 SGDK 就是前面提到过的全局环境变量:
${SGDK}/inc/**
${SGDK}/res/**
弄好之后可能又报错了,while(true) 这里的 true 错了,说是【未定义标识符 "true" 】
之所以会报错是因为我电脑里没安装任何的C语言编译器,咱们开发 MD 游戏暂时也用不到别的C语言编译器,可以把 true 改成 1,非 0 即真嘛~
还有一个办法,这时候咱们已经有代码提示了,把 true 删了,重新输入 true,会提示有一个大写的 TRUE 可以用,咱们可以直接用 SGDK 本身定义好的 TRUE。
while 循环里面的部分就相当于 unity 引擎中的 Update 函数,每一帧都会执行,但是咱们需要在循环里面加一个中断,不然画面刷新可能会出问题,代码如下:
VDP_waitVInt();
然后 while 上面的部分就相当于 unity 引擎中的 Start 函数,在运行游戏的时候执行一次,那么我们就可以在这里加上一句绘制文字的代码:
VDP_drawText("Hello World !", 12, 12);
这行代码看名字就知道是绘制文字的,后面的两个参数都是12,也就是绘制文字的坐标,但这个坐标不是指的像素,而是 tile 格子,一个 tile 格子是 8x8 像素。全部代码如下图所示:
- 编译工程
前面已经提到过编译命令了,只是还没使用过,现在咱们要在 vscode 中使用这条编译命令,按 Ctrl+J 调出终端面板,再次输入下面的命令:
%SGDK%/bin/make -f %SGDK%/makefile.gen
按回车,见证奇迹。
一切顺利的话,会在根目录下生成一个 out 文件夹,里面有很多文件,其中有一个 rom.bin 就是编译出来的游戏 rom 了。
- 用模拟器运行 Hello World
我给大家推荐两个模拟器,一个是 Kega Fusion,另一个是 Gens Kmod,fusion 是我平常玩 MD 游戏用的,非常稳定,自带 N 多的滤镜,不会丢帧,kmod 是开发调试用的,调试功能非常强大。
用模拟器打开游戏rom这种事我就不在这里说了,直接放运行截图:
标签:bin,MD,java,入门篇,res,编译,SGDK From: https://www.cnblogs.com/sangerge/p/17049057.html