使用HGE時管理資源的問題..

現在用HGE寫個遊戲玩玩...

當我在切換場景的時候發現了個問題...

由於我們設置的程序的Enter和Leave成隊組成,這樣便於切換場景...

不過呢..有些時候當到了某一個State(遊戲場景),需要載入一些數據...

Texture_Load()便成了我們平時要用的,爲什麼呢,

例如,你在做登陸的時候,還沒有登陸不可能需要把所有資源載入吧,除非你的資源本來就小,並且載入資是在構造裏才行.

這個時候問題就來了..

Texture_Load()我原以爲會像其它引擎一樣自動識別文件是否已經被輸入的..

結果不然.需要自己處理.以免資源重複載入..

爲此我寫了一個類:

如下:

ResServer.h文件:

#include "hge.h"
#include 
"hgesprite.h"
#include 
<map>

#pragma pack (push)
#pragma pack (1)

class tResServer
{
public:
    tResServer(
void);
    
virtual ~tResServer(void);

public:
    
void        LoadRes(int id, const TCHAR* file);
    
void        Release();
    HTEXTURE    GetRes(
int id);
    hgeSprite
*    MakeSprite(int id, float x, float y, float w, float h);

private:
    
static tResServer* pAddr;
    std::map
< int, HTEXTURE >    pTexture;

public:
    
static tResServer* Instance();
};

inline tResServer
* tResServer::Instance()
{
    
return pAddr;
}

歡迎轉載.轉載請註明出處:原創地址

 ResServer.cpp文件:

#include ". esserver.h"
#include 
"kernelserver.h"

tResServer
* tResServer::pAddr = 0;

tResServer::tResServer(
void)
{
    pAddr 
= this;
}

tResServer::
~tResServer(void)
{
}

void tResServer::LoadRes(int id, const TCHAR* file)
{
    HTEXTURE tex 
= GetRes(id);
    
if (!tex)
    {
        HTEXTURE tex 
= tKernelServer::Instance()->Device()->Texture_Load(file);
        pTexture.insert(std::map
< int, HTEXTURE >::value_type(id, tex));
    }
}

void tResServer::Release()
{
    HGE
* pDevice = tKernelServer::Instance()->Device();

    
for (std::map< int, HTEXTURE >::iterator i = pTexture.begin(); i != pTexture.end(); ++i)
        pDevice
->Texture_Free(i->second);
    
    pTexture.clear();
}

HTEXTURE tResServer::GetRes(
int id)
{
    std::map
< int, HTEXTURE >::iterator i = pTexture.find(id);
    
if (i != pTexture.end())
        
return i->second;
    
else
        
return 0;
}

hgeSprite
* tResServer::MakeSprite(int id, float x, float y, float w, float h)
{
    HTEXTURE tex 
= GetRes(id);
    
if (tex)
        
return new hgeSprite(tex, x, y, w, h);
    
else
        
return 0;
}

 

當然.用了以上代碼是不會編過的..

因爲tKernelServer是我已經封裝HGE了的個核心服務..不過上面的代碼只用了HGE*...

應該很好理解.

發佈了67 篇原創文章 · 獲贊 6 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章