游戏开发中常用的设计模式
发表于2017-12-14
在做游戏开发的时候,肯定会面临设计模式的选择,为了让大家清楚了解每个设计模式的用法,下面就给汇总了游戏开发中常用到的设计模式,一起来看看吧。
单例模式
游戏客户端就是一个单例。
各类单例器,如UI管理器,事件管理器等。
下面是Python实现的一个单例。
class Singleton(object): @classmethod def Instance(cls): if not getattr(cls, "_instance", None): cls.__instance_num__ = 0 cls._instance = cls() return cls._instance @classmethod def CleanInstance(cls): cls._instance = None def __init__(self): self.__class__.__instance_num__ += 1 if self.__class__.__instance_num__ != 1: raise TypeError('Singletons must be accessed through `Instance()`.')
状态模式
简单AI
技能释放过程
游戏的各个阶段
任务的各种状态
享元模式
享元模式用于在多个对象之间共享相同的数据。
例如,游戏场景中的一些植被和重复得小物件,它们的贴图或是网格都是一样的,可以创建一个公共的对象来记录这些数据,我称之为共享数据,然后他们的位置,朝向可能都不一样,这些数据我称之为私有数据。
如我们要在游戏场景中绘制1k棵树,在未使用享元模式之前:
class Tree { private: Mesh mesh_; Texture bark_; Texture leaves_; Vector position_; double height_; double thickness_; Color barkTint_; Color leafTint_; };
使用享元模式之后:
class TreeModel { private: Mesh mesh_; Texture bark_; Texture leaves_; }; class Tree { private: TreeModel* model_; Vector position_; double height_; double thickness_; Color barkTint_; Color leafTint_; };
这样我们就只需要创建一个Model对象,让所有的树都引用这份数据,而不是每棵树都拥有自己的网格数据,可以节约内存。以上例子来源于《游戏设计模式》。
使用享元模式的前提是,他们的数据必须是可以共享的,即有相同的数据。
工厂模式
使用工厂模式创建对象,可以对对象进行统一的创建、初始化等操作,便于对对象做统一的管理,比如对频繁创建销毁的对象增加内存池。
观察者模式
观察者模式是多对一的关系,追典型的应用就是事件。
组件模式
组件模式是将独立的功能点做一个封装,便于增删和管理。
组件模式一般有两种,一种就是组合(就是经常拿来跟继承对比),另一种是属性扩展,就是将组件中的所有方法和属性,扩展到载体中。
例如,寻路组件,刚体组件等。
Unity中各种的Component就是组件,Unity就是组件的集合。
Cocos Createor也使用组件式开发。