笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。
CSDN视频网址:http://edu.csdn.net/lecturer/144
本篇博客给读者介绍一下关于Prototype原型设计模式在游戏中的应用,先举个例子,假设我们为游戏中的每一种怪物都有不同的类 - 鬼,恶魔,巫师等,如:
class Monster
{
// Stuff...
};
class Ghost : public Monster {};
class Demon : public Monster {};
class Sorcerer : public Monster {};
一个spawner类
构造一个特定怪物类型的实例。 为了满足
游戏中的每一个怪物,我们可以通过为每个怪物类提供一个spawner类来管理
它,从而可以
并行类层次结构如下所示:
实现它将如下所示:
class Spawner
{
public:
virtual ~Spawner() {}
virtual Monster* spawnMonster() = 0;
};
class GhostSpawner : public Spawner
{
public:
virtual Monster* spawnMonster()
{
return new Ghost();
}
};
class DemonSpawner : public Spawner
{
public:
virtual Monster* spawnMonster()
{
return new Demon();
}
};
这显然不是一个好
的设计
方法。。。。。。
Prototype模式提供了一个解决方案, 关键的问题是,一个对象可以产生类似于自己的其他对象, 如果你有一个幽灵,你可以从中制造更多的鬼魂, 如果你有一个恶魔,你可以制造其他恶魔, 任何怪物都可以被视为用于生成其他版本的原型怪物。
为了实现这一点,我们给我们的基类Monster,一个抽象的clone()方法:
class Monster
{
public:
virtual