广安市网站建设_网站建设公司_内容更新_seo优化
2026/1/6 18:19:38 网站建设 项目流程

享元模式

建议阅读:https://gpp.tkchu.me/flyweight.html

定义

在我们打游戏时,有没有想过为什么这么多的人物或者景色能被这么快的渲染出来,而没有丝毫卡顿(当然GPU性能要好0.0)。

比如说,求生之路的大量丧尸以及其周围的景色(譬如树木)。
这是非常大的数据量,多边形网格和纹理数据非常大。描述整个场景的对象在一帧的时间内就交给GPU实现是太过了。

因此,有没有什么比较好的处理办法?有的,游戏中通常用享元模式来处理这种场景。

其关键在于,大量的人物/树木大多是长得一模一样,他们使用了相同的网络和纹理。这就意味着这些人物/树木的实例的大部分字段是一样的。

因此,我们可以将其共有部分拿出,分离到一个新类中。例如,游戏中的每个树的实例只需有一个对这个共享数据的引用,留下来的是那些实例相关的数据:

// share class TreeModel { private: Mesh mesh_; Texture bark_; Texture leaves_; }
// private class Tree { private: TreeModel* model; Vector position_; double height_; double thickness_; }

可见,享元模式通过将对象的数据分成两种来解决这种问题。
第一种数据作为共享数据,可被每棵树的实例所应用。Gof称之为固有状态(不会变化的状态)。
第二种数据作为私有数据,为不同树的实例所持有,例如位置、颜色等。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询