This repository has been archived by the owner on Feb 17, 2024. It is now read-only.
Releases: ShenMian/clementine
Releases · ShenMian/clementine
v0.0.1
概述
该版本的框架和 v0.0.0
版本相比有着较大的改变, 变得更加现代和灵活. 添加了窗体, 不再仅支持终端窗口.
架构
构建
- 使用 'CMake' 构建可执行文件.
- 使用 'Premake5' 构建项目工程文件, 包括 gmake, Xcode, Visual Studio.
- 在 'Script/' 中提供了若干脚本方便用户快速构建.
音频
渲染
- 使用了第三方 OpenGL 作为渲染 API.
- 使用了第三方 GLAD 作为多渲染 API 加载器.
- 使用了第三方 GLFW 作为多平台窗口 API.
- 使用了第三方 Dear ImGui 作为支持多渲染 API 的 GUI.
重大改变
- 文件/文件夹命名规范改为大写字母开头.
- 命令行下的实现被转移到了
Source/Clem/Rendering/Console
中. Application
中大部分职责被分配到Main
中, 只保留了应该具有的功能.- 对
Entity
操作的实现都被分配到了System
的派生类中, 由Registry
统一管理. - 组件有新 ECS 系统管理, 不再继承于
Component
.
详情请查看 Compare.
v0.0.0
概述
该版本构建了一个大致的框架, 包含了一个游戏引擎必须具备的基本功能(外设输入除外). 为 v0.0.1
版本的开发做了充分的准备.
架构
- 利用继承实现了一个简单的 Entity-Component-System.
Facor
扮演实体的角色.Component
作为组件的基类. 从它派生出的类有Rigidbody
/Sprite
.
Director
管理Scene
,Scene
管理Factor
.
构建
- 使用了 CMake 来实现跨平台的构建工作.
输出
FrameBuffer
负责输出工作.- 在Unix下标准输出ANSI码.
- 在Windows下使用WriteConsoleOutput(WinAPI), 以提高输出效率. 经测试, 若在支持ANSI码的Win10终端下执行, 120x30大小的窗口下大约5-6FPS. 而使用WinAPI在120x30大小的窗口下10000+FPS, 输出的效率和效果都得到了极大的提升.
- 此部分的难点在于不同平台之间的具体实现差异较大.
- 实现了双缓冲, 为后期实现多线程提供基础.
输入
该部分尚未实现. 因为外设(鼠标/键盘/游戏手柄)的输入在不同操作系统上差异过于巨大且没有找到单独提供输入功能的第三方库, 所以将该部分工作推迟到下一个版本.
入口点
Application
是用户程序的入口点. 用户将继承该类并实现相关虚函数. 引擎将在启动后调用用户实现的子类.
内置CPU抽样性能分析器
Profiler
是内置的CPU抽样性能分析器. 可用于分析 函数/指定几行代码 的执行效率. 分析结束后生成一份JSON格式的文档. 可以将其导入浏览器内的Tracing功能进行分析. 使用了宏对相关功能进行了封装, 使用十分简单.
随机数生成器
Random
负责生成指定大小的随机数.- 内部实现对std::mt19937进行了封装.
- 使用了
std::uniform_int_distribution
作为分布对象, 以生成离散均匀分布随机数.
物理引擎
Rigidbody
作为刚体, 负责存储速度和加速度. 管理Collider
.Collider
作为碰撞体, 具有碰撞体积, 负责碰撞检测. 从它派生出的子类有BoxCollider
/CircleCollider
.- 碰撞检测的具体实现在
Collider
子类的collides
函数中.
数学
Point
二维点, 用于表示位置信息(如实体的坐标).Vec2
二维向量(矢量). 用于表示矢量信息(如实体的速度加速度属性).Size
二维大小, 用于表示二维矩形的大小(比如控制台窗口大小).Rect
矩形, 可计算矩形之间是否存在交集.
摄像机
Camera
表示玩家视口. 将出现在 视口(Viewport) 内的Sprite
渲染到FrameBuffer
中.
日志
Log
负责记录日志. 该部分仅对第三方spdlog进行了简单的封装.