2D游戏开发 - SkyGameEngine2d 引擎架构 | 目录结构 | 引擎入口点
2D游戏开发 - SkyGameEngine2d 引擎架构 | 目录结构 | 引擎入口点
- 一、引擎架构
- 二、引擎目录
- 2.1 src目录介绍
- 三、项目目录
- 四、引擎框架入口点分析
- 4.1 main.cpp 分析
- 4.2 GameAppDelegate.cpp 分析
SkyGameEngine2d - 探索 简洁 易用 ,一款适合游戏入门学习的2d游戏引擎
项目地址 https://gitee.com/xfcode/SkyGameEngine2d
QQ群号
:498358732
加群链接
:https://jq.qq.com/?_wv=1027&k=5odSA9K
示例游戏视频链接
:https://www.bilibili.com/video/av59147631/
更多文章见
:SkyGameEngine2d 游戏引擎相关文章目录汇总
一、引擎架构
游戏引擎是一个比较复杂的软件系统,按照引擎系统的构成可以初略的划分为以下模块
引擎基于windwos平台,在平台之上使用了 DriectX11
、MIC
库。并且引入了一些第三方的库(Tinyxml2、WICTextureLoader)。
引擎中大量的使用了C++11
的特性以及其标准库,其中最为重要的内存管理机制依赖于C++中的智能指针
。并且引擎在处理回调方面抛弃了过去的函数指针的形式,而是采用更加安全方便的仿函数
。
引擎包含的模块有:
- 资源管理
- 渲染系统
- 节点系统
- UI系统
- 动画系统
- 事件系统
- 音频管理
- 任务调度系统
- 外设输入管理
引擎种各个模块并非完全独立的,有些模块之间存在依赖关系,有些模块仅仅是为了架构清晰而提出的,实际上部分实现已经渗透到引擎的各个模块。接下来简要的说明各个模块的功能。
核心系统是整个引擎各个模块的公共部分,提供了调试、一些便利的工具类和宏以及数学库。其中数据库可以充分利用现代CPU的SIMD特性,更快对各种矢量、矩阵进行运算。
渲染系统与节点系统、UI系统是密切相关的,他们也是引擎的核心所在。渲染系统对下封装了DriectX11的功能,如着色器、纹理、渲染状态等;对上为节点系统、UI系统提供了一套渲染机制,使其可以不必太关心具体的渲染细节,而专注于做引擎的逻辑。
事件系统和任务调度系统是可以起到连接引擎与游戏的桥梁,游戏可以通过监听各种事件来获取引擎的状态。同时这两个模块也为游戏开发提供了极大的方便,事件机制可以解决游戏中复杂的对象关系之间的耦合,定时器则方便游戏进行多种时间相关的处理。
动画系统为引擎种可执行动画的元素实现了简单的动画(位移、帧动画等)
资源管理 包括游戏资源(纹理、声音等)管理与系统资源管理(句柄、内存等)。对于游戏资源采用缓存机制,在游戏加载时载入缓存,如果再次使用相同的资源则不必重新加载。对于系统资源采用基于父子节点树的管理方式和基于智能指针1的管理方式。
二、引擎目录
引擎目录如下图所示(以1.0.3版本
为例)
- bin 目录存放引擎编译后产生的文件,如
debug\SkyGameEngine2d_d.lib
- build 目录存放引擎的VS工程文件,如
SkyGameEngine2d.sln
- doc 目录存放引擎的文档,可浏览器打开
index.html
本地阅读文档 - empty_template 目录为游戏项目的一个空模板,一般不需要关心该目录,
仅供引擎工具新建一个项目时使用
。 - include 目录包含引擎的头文件
- sample_game 目录存放引擎的示例游戏项目
- src 目录存放引擎的源码
- test 目录存放引擎的测试项目
- tool 存放一些工具相关的数据或者项目
2.1 src目录介绍
src目录如下(以1.0.3版本
为例)
- action 包含了动画系统的实现
- audio 音频管理的实现
- base 引擎的公共基础库实现,比如事件系统、数学库、颜色等
- example 某些api的用法。
仅供文档 对其进行引用 ,已说明某个API的示例用法,文件不会参与到引擎编译
- external 第三方库
- node 节点系统的实现
- ui UI系统的实现
- utility 一些工具类\函数\宏定义
- win32 与windows平台相关的代码
- render 实现渲染系统
三、项目目录
参看教程 2D游戏开发 - SkyGameEngine2d 创建一个游戏项目 创建一个新项目。
项目目录如下图:
- build 文件夹为游戏工程文件存放的目录
- res 文件夹为 游戏中的资源文件 (图片、声音等)存放的目录
- sky_game_engine2d 文件夹为引擎相关的文件(工程文件、源码等)
- src 文件夹为游戏源码存放的目录
重点说明src目录如下所示
- framework 引擎框架入口
- scene 游戏场景的实现
引擎入口实现文件如下所示
四、引擎框架入口点分析
4.1 main.cpp 分析
首先分析main文件
//main.cpp int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow
)
{UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);std::unique_ptr<GameAppDelegate> app_delegate = std::make_unique<GameAppDelegate>();auto app=Application::getInstance();app->setAppDelegte(app_delegate.get());return app->run();
}
WinMain()
为win32应用程序的主函数【类似于 main() 】。在该函数中首先创建一个GameAppDelegate
对象,然后获取程序实例并且设置代理对象。最后,程序实例对象app
执行 run()
函数。run()
函数为引擎工作的开始,它由初始化代码
、游戏循环
和 退出清理代码
三部分组成。代码如下所示。
// run 函数实现 int Application::run(){//1.初始化应用程序if (!initApp()){return -1;}//2.游戏循环this->loopApp();//3.退出游戏 清理this->clearApp();return 0;}
4.2 GameAppDelegate.cpp 分析
上一小节提到在主函数中首先创建GameAppDelegate对象,那么该对象在游戏中有何作用,这要从引擎基础架构的设计说起。
IApplication
提供了应用程序代理的设置以及Windows消息过滤器的设置。开发者可以通过消息过滤器来自定义的处理系统消息。IAppDelegate
接口为开发者提供了定义引擎运行的各个阶段的能力。比如设置窗口的尺寸、调整游戏帧率、初始化场景等。开发者需要继承该接口,复写其接口 即可,引擎在适当的时候回调用这些接口。IApplicationView
接口提供了与程序视图相关的数据,比如当前窗口的大小等。
总之,引擎通过上述3个接口来描述游戏程序,分别处理 程序的基础逻辑、开发者自定义程序逻辑、程序的视图三个部分。IApplication
、IApplicationView
接口均由引擎本身实现,而IAppDelegate
接口由游戏开发者实现,来控制程序运行各个阶段的逻辑。
引擎工具在创建项目时 默认提供了 GameAppDelegate
类来实现IAppDelegate
接口,该类的实现均为默认情况在的设置,开发者需要根据实际项目调整。
下面以默认的实现来说明如何通过代理(GameAppDelegate)
控制游戏程序。
bool GameAppDelegate::appInit()
{//设置帧率auto app = Application::getInstance();app->setPerFrameInterval(1 / 120.0f);#ifdef _DEBUGGameWorld::getInstance()->openDebugConsole();GameWorld::getInstance()->isDisplayRenderInfo(true);
#endif // _DEBUG//TODO 做自己想做的事情吧 。//开始场景 auto g = GameWorld::getInstance();g->pushScene(TestScene::create());g->start();return true;
}
appInit()
为程序的初始化阶段,在该阶段可以对程序的初始化值进行设置,比如帧率(默认为60),亦可以加载一些游戏资源等等2。重要的是一定要在最后启动一个游戏场景,这样游戏才可以正常运行。
注意:请勿在该函数中执行太多的耗时操作,这样会导致程序假死。
IAppDelegate
接口作用如下表所示
接口名字 | 作用 |
---|---|
appInit | 引擎初始化后会调用,用来控制程序的初始信息 |
getWindowsSize | 引擎通过该接口获取程序的窗口尺寸 |
appEnterBackground | 当程序被最小化时调用该接口 |
appEnterForeground | 程序从最小化进入正常窗口时调用该接口 |
更多文章见:SkyGameEngine2d 游戏引擎相关文章目录汇总
本节完
最后更新时间:2019年7月19日 21:27:40
这里指的智能指针包括 C++中的智能指针和WinRT中管理com组件的Com智能指针
ComPtr
↩︎该阶段引擎的基础组件其实已经初始化完毕,所以在该函数中几乎可以使用引擎中的全部API ↩︎
2D游戏开发 - SkyGameEngine2d 引擎架构 | 目录结构 | 引擎入口点相关推荐
- 2D游戏开发 - SkyGameEngine2d 游戏引擎相关文章目录汇总
SkyGameEngine2d - 探索 简洁 易用 ,一款适合游戏入门学习的2d游戏引擎 项目地址 https://gitee.com/xfcode/SkyGameEngine2d QQ群号:498 ...
- 2D游戏开发 - SkyGameEngine2d 创建一个游戏项目
2D游戏开发 - SkyGameEngine2d 创建一个游戏项目 一.前期准备 二.获取引擎工具 2.1 下载工具集 2.2 解压并且打开工具 三.使用工具 3.1 工具界面介绍 3.2 设置引擎路 ...
- 2D游戏开发 - SkyGameEngine2d坐标系
2D游戏开发 - SkyGameEngine2d坐标系 一.DX11使用的坐标系 二.屏幕坐标系&窗口坐标系 三.SkyGameEngine2d 坐标系 四.世界坐标系&局部坐标系 五 ...
- 2D游戏开发 - 配置SkyGameEngine2d环境
2D游戏开发 - 配置SkyGameEngine2d环境 一.本项目需要准备的环境 二.下载引擎源码 三.打开工程 四.编译项目 五.运行示例游戏 SkyGameEngine2d - 探索 简洁 易用 ...
- webGL、webGPU、封装、渲染引擎 three.js、游戏引擎,定位是游戏开发,在前面的渲染引擎基础上,还提供了骨骼动画、物理引擎、AI、GUI 等功能,以及可视化编辑器来设计关卡,支撑大型游戏
https://zhuanlan.zhihu.com/p/162878354 如何选择 WebGL 框架和引擎? 知道得越多,不知道的就更多了 数据可视化Sugar-百度智能云 cloud.ba ...
- Unity 2D游戏开发快速入门(内部资料)
Unity 2D游戏开发快速入门(内部资料) 试读样张:http://pan.baidu.com/s/1hqh5oqw Unity 2D游戏开发快速入门4 前 言 Unity是一款综合的游戏开发工具 ...
- Unity简单2D游戏开发
Unity简单2D游戏开发 前言: 近日比较无聊,在b站找了一个up主,跟着他的教程来做游戏--开发一个简单的2D游戏 用 Tilemap 绘制场景 新建一个2D项目,在Unity Asset Sto ...
- Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍
Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍 本书主要讲解的是,如何使用Unity开发2D游戏.但在开始讲解之前,最好先熟悉一下Unity这个工具.本章会首先介绍Unity的下 ...
- Unity 4.x 2D游戏开发基础教程大学霸第一更
Unity 4.x 2D游戏开发基础教程 大学霸 第1章 Unity及其组成的介绍 本书主要讲解的是,如何使用Unity开发2D游戏.但在开始讲解之前,最好先熟悉一下Unity这个工具.本章会首先介 ...
最新文章
- ZooKeeper客户端地址列表的随机原理
- jQuery获取元素内容
- 你所需要的java异常的处理和设计及深入理解,看这篇就差不多了
- 使用SAP OData服务创建销售订单
- 在webservice中传递Hashtable
- 使用java代码发送zip文件到邮箱_Azkaban安装与使用(下)
- centos 6.7 mysql 5.6_CentOS 6.7 安装 MySQL 5.6 思路整理
- 5 thinkpad 黑将评测_ThinkPad L380视频评测:全能型商务助手
- 使用C#代码实现增加用户帐号
- URL与URI的区别和联系
- 阿里云认证(ACA/ACP/ACE)的分类以及官网价格
- 2022年前端还好找工作吗?
- android 8.0 图标规范,Android 8.0自适应图标
- 基于zxing的彩色二维码生成与解析
- OSI七层模型和STP/IP协议模型(生动形象,简单易懂)
- web标准 浏览器介绍 开发工具介绍 HTML介绍 HTML颜色介绍 规范 HTML结构详解 {前端之前端初识}...
- 金弘同创怎么样:拼多多获取奖励金的办法
- 一个JavaScript实现的贷款计算器
- Mobius 莫比乌斯
- 基于低代码平台实现的内外OA协同办公系统
热门文章
- 声发射传感器的内部结构
- ON1 HDR 2020.1 14.1.1 (8985) 中文版 专业的HDR照片处理
- 什么是一代视频监控?闭路电视视频监控系统介绍
- 用python画星空-python3的turtle画模仿3d星空、运动的恒星小宇宙
- 如何拍背景虚化的照片_手机拍照,怎么拍出人物突出、背景虚化的照片?
- 编译原理实验入门-Cygwin-Flex-Bison-下载安装+基本操作
- 土狼向狮子的演进(z)
- 零基础学PS平面设计基础有哪些?
- 如何做好软件开发项目管理?
- Android中Notification设置setSmallIcon、setLargeIcon无效的问题,仍显示安卓自带的机器人图标(小米10手机)