From 1480566162af4d5aab3ed6b611a4b802f1385a77 Mon Sep 17 00:00:00 2001 From: TsXor Date: Tue, 14 May 2024 21:44:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E4=BB=A3=E7=A0=81=E8=AE=B2?= =?UTF-8?q?=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- impl_doc.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 impl_doc.md diff --git a/impl_doc.md b/impl_doc.md new file mode 100644 index 0000000..0693482 --- /dev/null +++ b/impl_doc.md @@ -0,0 +1,28 @@ +# SillyGame代码讲解 + +## 外层 +外层主要由“活动类”构成,目前有3个类: +- `acts::avg_scene`:目前大多数场景的基础 +- `acts::black_jack_scene`:21点游戏的实现 +- `acts::plane_battle_scene`:飞机大战游戏的实现 + +其中`acts::avg_scene`并不包含具体场景的内容,它根据构造场景时传入的`name`参数在静态成员`scene_scripts`中查找对应的场景脚本,由指定的脚本填充场景的具体内容。 + +除此之外,简单物理模拟器算法也暂时位于外层,简单物理模拟器由`naive_engine::simulator`类实现,其中使用了松散网格四叉树来高效检测碰撞。 + +## 内层(框架层) +内层实现了游戏运作所需的基础设施。核心类为`silly_framework::game_window`,下辖几个分管理员: +- `render_manager`:管理基础渲染功能 +- `texture_manager`:管理纹理加载,使用LRU缓存减少重复加载 +- `input_manager`:管理键盘输入和键位映射 +- `activity_manager`:管理“活动类” + +其中`activity_manager`实现了两大核心机制:消息队列与活动栈。 +- 消息队列:使活动异步单线程地处理事件,避免线程冲突。 +- 活动栈:通过栈实现类似函数调用栈的功能,一个活动可以“调用”另一个活动,被调用活动退出后,回到原活动。 + +在寝室触发21点或飞机大战,游戏完成后回到寝室,就是利用了“活动调用”。 + +## 工具 +为了在C++代码中方便地调用配置文件中写的数据,本项目使用了一些Python脚本自动生成。 +