游戏对象与对象之间免不了进行互动, 比如玩家要攻击敌人,体积碰撞的检测,等等,最初落羽用的是最笨的方法,就是在类里面保存其他类的指针,事实证明这样做会带来很多麻烦,而且很不方便,特别是在类销毁的时候,非常容易导致程序崩溃。现在落羽教大家一种比较方便的方法,单例类。
1.实现思路
单例类, 顾名思义,就是只被实例化一次,我们在单例类里面储存各个对象的指针,以便于对象之间的交互。
2.程序
类模板
#ifndef __SINGLETON_H__
#define __SINGLETON_H__
template <class T>
class Singleton
{
public:
static inline T* getInstance();
void release();
protected:
Singleton(){}
~Singleton(){}
static T* m_instance;
};
template <class T>
inline T* Singleton<T>::getInstance()
{
if (!m_instance)
{
m_instance = new T;
}
return m_instance;
}
template <class T>
void Singleton<T>::release()
{
if (!m_instance)
{
return;
}
delete m_instance;
m_instance = 0;
}
#endif
单例类头文件
#ifndef GLOBAL_H
#define GLOBAL_H
#include "cocos2d.h"
#include "Singleton.h"
#include "Define.h"
#include "Player.h"
using namespace cocos2d;
class Global : public Singleton<Global>
{
public:
Global();
~Global();
Player *player;
};
#endif
单例类实现
#include "Global.h"
template<> Global* Singleton<Global>::m_instance = NULL;
Global::Global()
{
player = NULL;
}
Global::~Global()
{
}
单例类的使用
Global::getInstance()->player //访问单例类里面的对象
3.单例类用起来确实很方便,很轻松的就解决了对象之间的交互问题,这节就到这里,下次我们讲碰撞检测系统。