游戏开发中常用的设计模式

发表于2017-12-14
评论0 5.9k浏览
在做游戏开发的时候,肯定会面临设计模式的选择,为了让大家清楚了解每个设计模式的用法,下面就给汇总了游戏开发中常用到的设计模式,一起来看看吧。
单例模式

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

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引