《春日记》开发记录【3】

来源:互联网 发布:linux cp -f 编辑:程序博客网 时间:2024/04/28 09:25

自己用Laravel写的小博客和CSDN的博客以后同步更新:
《春日记》开发记录【3】

层次模块化

为了不让代码最后变成大麻花,我们的一个重要工作就是解耦。
对于一个OO语言来说,我们可以用设计模式来解耦。
这里因为项目是比较简单的,所以为了提高效率,我只采用了层次化。
CPP因为不允许互相嵌套头文件,经常到导致互相引用比较困难。
这时层次化就显得更为重要了。

我们将程序的各个功能分割为若干模块,程序架构的每一层由若干个模块构成。
设计时我们对于模块只关心它的接口,即模块提供什么功能。
我自己的设计接口的方式是先想象上层的工作流。
就是当程序运行到上层模块时,我们需要依次让下层干什么。
比如,我们运行到一个场景中,就需要先从持久化模块读取数据,
然后通知绘图程序构建图元,然后再通知窗口绘制刷新。
这个时候我们就知道了持久化模块、绘图模块、窗口模块各自需要提供的功能。

架构模块的时候最好是画出架构图,然后列出各个模块的功能和接口。
这样做可以保证最后编码时我们只考虑当前模块,避免同时考虑太多导致思维混乱。

我的这个项目的架构图如下:

架构图

图中,Game向外提供整个游戏的运行接口。Scene类提供一个Scene接口,
所有继承该接口的类都可以被Game调用。不同的Scene提供不同功能,
有初始化Scene有brandScene等等。其下就是三个主要功能模块。
Audio负责读取并且解码音频,提供音频播放功能。
Frame负责创建回收窗口,并且绑定OpenGL上下文,提供鼠标输入功能。
Painter负责调用OpenGL绘制,读取TrueType字体即时构建字符纹理,
对上层提供基础图元Sprite。
Storage负责从加密文件中读取资源,并且负责解码TTF/PNG资源。
而Tween负责处理各种缓动动画。

0 0
原创粉丝点击