遊戲對象與對象之間免不了進行互動, 比如玩家要攻擊敵人,體積碰撞的檢測,等等,最初落羽用的是最笨的方法,就是在類裏面保存其他類的指針,事實證明這樣做會帶來很多麻煩,而且很不方便,特別是在類銷燬的時候,非常容易導致程序崩潰。現在落羽教大家一種比較方便的方法,單例類。
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.單例類用起來確實很方便,很輕鬆的就解決了對象之間的交互問題,這節就到這裏,下次我們講碰撞檢測系統。