单例模式
游戏客户端就是一个单例。
各类单例器,如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也使用组件式开发。