最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

用SGDK开发世嘉MD游戏:入门篇

来源:博客园

用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

    SGDK_v1.80.zip

    下载完了把 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.oE:/Develop/MD/SGDK/bin/sh.exe: java: command not foundmake: *** [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正确识别,需要按以下方式组织项目的文件夹结构(这是必须要遵守的规范):

项目根目录

  • srcsrc目录(存放源代码文件,子文件夹最多支持2级深度,例如:src/engine/enemy/*)

  • incinc目录(存放头文件)

  • resres目录(存放资源文件)

  • outout目录(编译输出游戏rom的目录,这个文件夹会自动创建,不需要自己建,自己建也是可以的)

文件类型说明

  • 源代码文件可以是 .c(C语言源文件)、.s(68k汇编源文件)或 .s80(z80汇编源文件)
  • 头文件可以是 .h(C语言头文件)或者 .inc(汇编头文件)
  • 主资源文件应为 .res(由 rescomp 工具编译的资源定义文件,详请参阅 SGDK_PATH/bin/rescomp.txt 文件)
  • 其他资源文件可以位于任何位置(虽然但是,还是推荐都放到 res 目录中),你需要在 .res 文件中正确引用其他资源文件,java 会帮助我们编译成SGDK可使用的资源。
    • .bmp图像文件(仅限索引颜色格式)
    • .png图像文件(仅限索引颜色格式)
    • .vgmvgm音乐文件(仅限megadrive专用的vgm)
    • .xgmxgm音乐文件
    • .wavwav音频文件(用来做音效)
    • .bin二进制数据文件
    • .cC语言源文件
    • .s68k汇编源文件

makefile支持3种不同的编译模式

  • release正式发布的时候用这个模式,这个模式会对代码做一些优化,这是默认模式。
  • debugGens 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 int main(){    while (true)    {    }    return 0;}

这几行代码很简单,相信已经成为大家的本能了,唯一要说明的就是

include

这个头文件是 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 是开发调试用的,调试功能非常强大。

Kega Fusion 3.64

Gens Kmod 073

用模拟器打开游戏rom这种事我就不在这里说了,直接放运行截图:

关键词: 环境变量 系统变量 快速修复