Game Programming Patterns 阅读笔记 3
回顾 Flyweight 享元模式 (代码以Gdscript呈现)
Flyweight的两种翻译
- 两种翻译的联系可以解释这个设计模式的思路:用”享元“实现了”蝇量“
森林的例子
-
森林由树组成
-
树由Mesh、Texture、Position、Height、Color等资源和参数组成
-
-
-
有多少树,就要消耗多少倍的资源,在同1帧内给GPU这么多资源实在是太多了
-
好在树长得都差不多,他们共享很多资源和属性
-
比如可以让Mesh、Texture共享
-
-
-
这就是现代图形API所支持的”实例渲染“,享元模式是硬件级支持的设计模式
-
其实只是把多个实例中不变的东西打包共享给所有该对象的实例
瓦片地面的例子
-
不要每个网格都分配一个瓦片实例
-
网格之间的唯一区别是位置不同,所以,所有草地瓦片共用一个实例,所有河流瓦片共用一个实例,所有丘陵瓦片共用一个实例
-
实现如下:
-
-
用例如下:
-
另见
- 和 ”工厂方法(Factory Method)“、懒加载、对象池结合享元的创建和存储会更好