這是一個以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
下
地
址
具體操做方法參照下圖,也可加微信私信。
免
聲
明
明