quinta-feira, dezembro 12, 2013

Singleton para jogos em C++

Olá pessoal, hoje vou compartilhar minha implementação de Singleton, segundo a Wikipédia Singleton é: 
Singleton é um padrão de projeto de software (do inglês Design Pattern). Este padrão garante a existência de apenas uma instância de uma classe, mantendo um ponto global de acesso ao seu objeto.
Ou seja uma maneira elegante de utilizar objetos globais aos quais só tem uma única instância, o melhor exemplo disso seria a Câmera, o nó raiz da cena, ou qualquer outro objeto que tenha acesso global.

#ifndef __SINGLETON__
#define __SINGLETON__
#include
#include "ObjectManager.h"
#include "Camera.h"
class Singleton
{
private:
    Singleton() {}
public:
    static Singleton *instance;
    dWorldID world;
    dSpaceID space;
    ObjectManager rootSceneNode;
    Camera rootCamera;
    dJointGroupID contactGroup;
    // Função-membro que retorna sempre a mesma instância do objeto
    static Singleton& getInstance()
    {
        if (!instance) instance = new Singleton();
        return *instance;
    }
};

#endif // __SINGLETON__

percebam que o construtor é privado isso impede de dar new na classe e criar uma nova instância; O que mas como eu vou usar então sem dar new na classe? Resposta sempre através do método getInstance, segue o exemplo de utilização.

Singleton::getInstance().world = dWorldCreate();
dWorldSetGravity(Singleton::getInstance().world,0.0,0.0,-9.8);
...
Singleton::getInstance().rootSceneNode.add(object);
...
Singleton::getInstance().rootSceneNode.Draw();
 ...
Espero que a implementação seja útil:
Saudações.

Mais referência: http://pt.wikipedia.org/wiki/Singleton

1 comentário:

Anónimo disse...

Sega Genesis Classics - Airjordan's 14Retro
Sega air jordan 18 stockx online Genesis Classics is a compilation air jordan 18 retro yellow good site of over air jordan 18 retro men order 50 classic titles from the golden era of Sega. It includes over 50 titles, air jordan 18 retro men red including Sonic the how to order air jordan 18 retro toro mens sneakers Hedgehog,