电子书链接
《游戏设计模式》
章节总结
命令模式
- 将请求封装为独立的对象,从而实现对请求的参数化、队列化
- 优点
- 高度解耦
- 撤销和重做:通过保存命令历史实现,如果不使用命令模式很难实现
- 缺点
- 实践用处:监听用户输入就是个很典型的命令模式
享元模式
- 简单理解就是将一个类里的完全公用的属性抽离出来,用单独的一块内存存储,而不是每个类的实例都去维护一块自己的,浪费内存。
- 比如我们要绘制一片森林,这些树大部分长得一样,那么它们就有相同的纹理、树叶、树枝等属性,这类属性就抽离出来。
- 在性能方面,与枚举有可比性
单例模式
- 单例顾名思义就是某个类全局只声明了一个实例,并向全局提供了访问这个实例的访问点。
- 通常为了确保该类只能被声明一次,该类的构造函数会写成私有属性,通过对外暴露静态属性instance防止多次构造。
- 优点
- 没有使用到的时候,不会创建实例,节约内存
- 虽然是单例,但是可继承。比如FileSystem是一个单例,但是我们可以在其基础上,根据不同的系统或平台抽象出其他文件系统,比如区分索尼和任天堂,就可以用 SonyFileSystem : FileSyetem 和 WiiFileSystem。
- 缺点:根本原因就是它是一个全局变量
- 代码可读性差
- 促进耦合的发生
- 并行不友好:游戏开发中难免会用到多线程,如果多个线程都想使用某个单例,那就会带来竞争、死锁等问题。
- 实践用处:
状态模式
- 使用有限状态机(FSM)的模式
- 优点
- 使用传统的分支判断,容易遗漏分支条件,且可拓展性极差,每有一个新状态的延伸,都会引入一堆bug和新的分支
- 同一状态下的所有操作、转移代码都放在一起,可读性好
- 实践用处:
- 角色模型动作状态转换控制(一般先画状态转移图STD,再在代码中用enum和switch分支实现转移,进阶写法不用switch,用状态委托)
- 并发状态机,比如FPG类,除了模型动作,持枪动作也是要考虑的,但是两者的状态转换不同,只是需要同样的input
双缓冲模式
- 当前缓冲用于完成实时的任务(比如当前帧的场景绘制),下一缓冲需要提前利用资源进行计算,等待下一帧的使用
- 交换缓冲区用交换指针或引用来实现
posted @
2025-07-11 14:53
Mizuki-Vone
阅读(
24)
评论()
收藏
举报