Skip to content

Latest commit

 

History

History
28 lines (20 loc) · 1.55 KB

impl_doc.md

File metadata and controls

28 lines (20 loc) · 1.55 KB

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脚本自动生成。