-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
28 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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脚本自动生成。 | ||
|