ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

Prototype

インスタンスをコピーして別のインスタンスを作り出す。
毎回、newでクラスからインスタンスを作り出すのではなく、プロトタイプとなるインスタンスをコピーして新しいインスタンスを作り出す。
ゲームで考えてみよう。ある敵が分裂するような場合があり、そのときの体力などのパラメータを同じにしたいとする。こんな場合はnewで新たに作成するよりも、コピーして作ってしまったほうが良いだろう。

class Enemy
{
private:
    int hp;
public:
    Enemy( int inithp )
    {
        hp = inithp;
    }

    Enemy createClone()
    {
        return new Enemy(hp);
    }
};


void doTest()
{
    Enemy enemy1 = new Enemy(100);

    Enemy enemy2 = enemy1.createClone();
}

コピーするメソッドでは新たに作成したインスタンスに今のメンバ変数をコピーするのを忘れないように。このときメンバ変数が配列の場合は配列の中身もコピーする必要があるかもしれない。さらにメンバ変数がポインタの場合は、そのままポインタの値をコピーしてよいのか、それとも新たに作成する必要があるのかを考慮しなくてはならない。


※ソースはイメージを表したもので、実際にはこのまま入力しても動作しない
参考文献:Java言語で学ぶデザインパターン入門
参考:ギコ猫とPrototypeパターン