这是一个以SDL2为基础实现的2D游戏框架,同时至关于提供了一个使用该框架制做DOS游戏《金庸群侠传》移植版的范例。Windows下可使用Visual Studio编译,其余系统下能够在src目录使用CMake生成Makefile,使用GCC或Clang编译,需至少支持C++14。VS工程为x64版本,如须要x86版请自行修改。html
安
git
说
程序员
明
github
架构的简单说明sql
一:公共部分数据库
一、Engine封装了一套SDL2的主要实现,与SmallPot相似。如更换绘图引擎,则只需修改此部分便可。编程
二、Save中对全部数据进行了封装,能够较为方便地调用。微信
三、TextureManger是一个纹理管理器,由于《金庸群侠传》的贴图是含偏移设置的,故有些特殊的地方。架构
四、Audio是音频类,基于BASS或者SDL_mixer,能够播放mid、mp三、wav等格式。app
五、PotConv封装了iconv的实现。
二:RunNode基础执行类说明
RunNode是游戏中的基本执行类,包含5个重要的虚函数:backRun,draw,dealEvent,onEnter,onExit。对应在背景中执行,如何画自身,如何处理事件,进入时的处理,退出时的处理。通常来讲,衍生类应重写这些函数。其中每一个元素能够包含数个子元素,在绘图时子节点也会被自动一一绘出。需注意在画自身的部分不须要处理子节点,除非有特殊的须要。
一、存在一个全局的的RunNode栈root(实际是std::vector),会从下到上依次画出每一个节点。RunNode类有一个占满全屏的属性,表示这个类将占用所有的屏幕,所以引擎在绘制的时候,会仅找出最靠上的含有该属性的节点,并从这里开始往上画。
二、建立一个节点,并调用run过程便可运行此节点,注意使用run执行的节点是彻底独占的,其子节点也会有事件响应。若是须要退出当前节点,在适当的地方使用setExit(true)便可,可是子节点调用是无效的,除非拥有当前运行节点的指针。
三、run过程的参数为一个布尔值,若是为true则会被加入到root并进行绘制,若是为false则只运行不参与绘制。可是不少节点的draw过程是空的,即便放到root中也不会参与绘制,实际利用了这一特性的仅有显示人物对话的部分。
四、run过程会返回一个函数值,能够利用进行一些判断,例如菜单的选择。
五、规定全部节点均使用共享指针,能够比较自由地互相包含。请不要让子节点出现递归包含,这样会迅速消耗掉全部资源。一般来讲,大部分游戏引擎都须要全局标记和回调来控制剧情的执行,本框架采用Element的run设计,使事件以阻塞的模式顺序执行,同时绘图还是无阻塞执行的,这样无需额外的标记事件便可以顺序执行。
三:视频这是做者编写的一个视频播放器,能够将其编译为动态库,做为SDL2的插件,用于进行视频过场的播放。若是难以处理,能够将预处理定义宏中的WITH_SMALLPOT删除。Mac和Linux下默认不会打开。四:音频音频播放可从BASS或者SDL_mixer中二选一,其中BASS的音质较好。以前SDL_mixer有严重的跳出问题,目前版本是否已经解决暂时不清楚。因BASS为商业库,故使用SDL_mixer做为备选,编译时增长宏USE_SDL_MIXER_AUDIO便可。连接选项并未分别处理。VS和GCC中,若是某个库的功能并未被用到,即便其包含在连接选项中,也不会参与实质的连接。五:abc工程以及资源的保存abc工程用来转换以前的数据。建议自行调整代码后,使用调试模式执行。其中主要的功能是将存档的R部分扩展为原来的二倍。即全部的16位整数转为32位整数,表示范围从32767扩大到2^31-1,足够一般的数值使用。同时,原有的字串也扩展为以前的二倍长度,例如原来人物的名字有5个中文字符长度,实际上最多只能使用4个字,转换以后则可使用9个字(并非推荐你用9个字)。转换以后的文件名变为r?.grp32。一、文件的文本编码,仅有初始存档为cp950(BIG5),这是向下兼容的须要,可是内部会使用cp936(GBK),存档被保存后也会转为cp936。二、存档的基础数据部分能够保存为sqlite的数据库格式。能够经过读取和保存来转换已有存档。三、游戏的资源文件是以单个图片的形式放在resource的各个目录中的,每张图的偏移保存在index.ka中,格式为每张图两个16位整数,连续存放。目前没有设计打包格式。四、战斗贴图文件中,每一个人的帧数,以前在hugebase(水浒)框架中使用fightframe.ka保存,现改用fightframe.txt保存。格式为动做索引(0~4),每方向数量。未写则视为0。五、以前游戏使用的列表文件只保留了升级经验列表和离队列表,改用txt格式。并不是全部的文档都转为32位,这有一部分是为了节省资源的须要。以上提到的数据,除了文本文件外都可以用真正的强强的新版upedit修改(该修改器不完善)。六:使用到的其余开发库一、如下库在Windows下建议使用vcpkg或者msys2来安装,或者也能够去官网下载,请自行选择。在Linux下编译时则应优先考虑使用系统的包管理器(例如apt等)自动安装的库,在Mac下可使用homebrew来安装。SDL https://www.libsdl.org/SDL_image https://www.libsdl.org/projects/SDL_image/SDL_ttf https://www.libsdl.org/projects/SDL_ttf/SDL_mixer https://www.libsdl.org/projects/SDL_mixer/libiconv https://www.gnu.org/software/libiconv/lua https://www.lua.org/PicoSHA2 https://github.com/okdshin/PicoSHA2sqlite3 https://www.sqlite.org/二、如下库已包含在本工程中:hanz2piny https://github.com/yangyangwithgnu/hanz2pinyzip https://github.com/kuba--/zipBASS, BASSMIDI http://www.un4seen.com/OpenCC https://github.com/BYVoid/OpenCCFast C++ CSV Parser: https://github.com/ben-strasser/fast-cpp-csv-parsersmallpot: https://github.com/scarsty/smallpot四、如下为间接使用,一般包管理器会自动处理。freetype https://www.freetype.org/FFmpeg https://www.ffmpeg.org/zlib https://zlib.net/libass https://github.com/libass/libassfribidi https://www.fribidi.org/libpng http://www.libpng.org/pub/png/libpng.htmlharfbuzz https://github.com/harfbuzz/harfbuzzfontconfig https://www.freedesktop.org/wiki/Software/fontconfig五、备注:SDL及相关的扩展均是2.0版本。汉字转拼音和压缩文件并不是Linux发行版的常见库,故直接使用了源码。PicoSHA2和CSV库仅须要头文件,若是文件不在包含目录中,请注意将它们复制到适合的位置。除BASS和BASSMIDI为闭源,但能够免费用于非商业项目以外,其余均为开源工程。七:common 功能集合下载common是做者所写的一个通用功能集合,被多个工程使用。其中包含了ini文件读写库,修改自如下工程:ini Reader https://github.com/benhoyt/inih
下
地
址
具体操做方法参照下图,也可加微信私信。
免
声
明
明