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

单例模式

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

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页