使用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*...

应该很好理解.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值