如何做一个跨平台的游戏编辑器(一)

嗯,这玩意没啥营养,纯属是有这方面的兴趣的程序员问了我相关的问题。这个事儿说复杂不复杂,一两句话又说不清楚,干脆写下来。


首先,技术选型


跨平台也不是说跨多远,windows linux macos

涉及的图形api 分别是 dx gl vulkan metal

根据这些线索,首先开发语言c/cpp是没跑了,虽然为了开发效率,大型项目一般都是混合语言开发,上层弄个python lua c# 啥的,这是后话。

结论一、底层c/cpp没跑

其次,绘图接口这部分分别写实现也挺麻烦的,找个开源库来解决好了,我们选型bgfx,他就是一个渲染器,用兼容的方式抹平了不同的api差距。当然兼容肯定就利用不上 vulkan metal dx12 等的高级独家特性了。我们对这些高级独家的玩意儿也不是特别感兴趣,兼容最高。

结论二、绘图部分用bgfx

https://github.com/bkaradzic/bgfx.cmake

然后,每个操作系统有一点自己独立的东西,这其中开发编辑器最头疼的就是窗口管理了,各个操作系统自己一套,适配很烦,这里我们请出一位玩兼容的祖师爷SDL,打从我第一天写代码的时候SDL就存在了,历史真的悠久。我们主要用SDL来管理窗口,键盘鼠标事件这些。SDL还提供其它声音视频等多媒体内容,但对我们一般没啥用。

结论三、窗口管理用SDL

编辑器上各种各样的UI,我这里选了IMGUI

https://github.com/ocornut/imgui/tree/docking

为什么选择IMGUI

1.因为他是基于我们自己的渲染器来画的,混合内容方便

2.他是一种类似Unity OnGUI的实现,搞UI特别快。

结论四、UI系统用IMGUI(docking分支)

最后还有个问题,cpp的开发环境每个平台也不尽相同,windows上最常用的肯定是vc,虽然也能用gcc,总归费劲一些。linux 和 mac 就是gcc了。

为了抹平开发环境的问题,我们引入一个构建工具cmake

结论五、使用cmake做构建工具

构建基础代码

cmake 安装,开发环境安装

这是我的cmake 版本

image

vs 和 windowssdk安装 略

我的版本 如图

image

bgfx 构建

抓取代码 git clone https://github.com/bkaradzic/bgfx.cmake

这个仓库只是 bgfx的cmake配置文件,他关联了三个仓库,才是真正的代码

cd bgfx.cmake
git submodule init
git submodule update
进入仓库目录,通过submodule 把这些代码拉回来,第一次要拉很久,bgfx仓库贼大

涉及到的仓库是这三个

https://github.com/bkaradzic/bgfx

https://github.com/bkaradzic/bimg

https://github.com/bkaradzic/bx

等不及就用其它方式把这仨弄回来

image

我肯定是懒得熟悉git命令行的,用小乌龟一样


之后在仓库目录新建一个build 目录 仓库目录指bgfx.cmake

image

就是有CMakeLists.txt这个文件的目录

image

cmake 默认输出文件夹是当前文件夹,我们在build这里执行,就会在build目录产生vc项目,然后我们编译vc项目就行。

cmake就是用来产生各种开发开发工具用的项目文件

cmake在linux 和 macos 就会产生标准的make 文件,后续make命令就能编译。


当你增加了新的源码,需要再执行一次cmake

IMGUI构建

IMGUI没几个源码,不用单独构建,直接丢进主项目就好

注意我们要的代码不在主干上

image

SDL构建

SDL不用构建,release整理的很清楚,随时去拿就好

https://github.com/libsdl-org/SDL/releases

https://github.com/libsdl-org/SDL/releases/download/release-2.0.22/SDL2-2.0.22-win32-x64.zip

这里我下载了一个2.0.22的


整合到一起

整合的東西有點零散,直接看代碼吧

https://gitee.com/lightsever/TTEngine/tree/master/purecpp

這裏整合了一份純粹的 bgfx+sdl2+imgui_dock,使用cmake 構建的項目

簡單説明一下

建議直接進入editorwin 目錄 cmake . 產生項目

然後直接編譯就可以


目前只配置了windows,但是所有的庫和工具都支持linux,配置上下點功夫就可以

脚手架代碼不用動,在appeditor裏面搞事情就可以了。


後面可以把c#實現的那樣一個多窗口環境反著弄回來,代碼量不大,直接在cpp環境工作,不用切來切去。

posted @ 2022-07-24 21:46  疯光无线  阅读(41)  评论(0编辑  收藏  举报