popcap资源管理


一、在EXE 文件目录下(如Debug)新建images 文件夹,并在里面加入back1.jpg 图片

 

二、在EXE 文件目录下新建properties 文件夹,并在里面加入资源描述文件resources.xml

//////////////////////////////////////////////////////////////////////////
// resources.xml

<?xml version="1.0" encoding="utf-8"?>
<ResourceManifest>
 
 <Resources id="Game">
  <!-- 这是注释 -->
  <SetDefaults path="images/" idprefix="BACK_" />
  <Image id="1" path="back1" />
 </Resources>
  
</ResourceManifest>
//////////////////////////////////////////////////////////////////////////


三、运行G:/PopCap_Framework_v1.3/osframework/tools/ResourceGen.exe

点New Project

Project Name: tt

Resource XML:  G:/CPP32/tt/Debug/properties/resources.xml

Resource Code: G:/CPP32/tt/Debug/properties/res

选中列表中的tt 项目,点Generate Code,在G:/CPP32/tt/Debug/properties 目录下生成了res.h 和res.cpp 两个文件

将res.h 和res.cpp 剪切到G:/CPP32/tt/src/res,并加入项目中

 

//////////////////////////////////////////////////////////////////
// main.cpp
// 显示图片,以加载资源的方法

#include <SexyAppBase.h>
#include <WidgetManager.h>
#include <ResourceManager.h>
#include <Widget.h>

#include  <SWTri.h>

#include "res/res.h"

#define ASSERT(value) if (!(value)) { _asm{int 3};}

using   namespace       Sexy;

#pragma comment( lib, "winmm.lib" )
#pragma comment( lib, "wsock32.lib" )

#ifdef  _DEBUG
#pragma comment( lib, "SexyAppFramework_D.lib" )
#else
#pragma comment( lib, "SexyAppFramework.lib" )
#endif

class   CApp;

class   CWidget : public Widget
{                      
public:
 CWidget( CApp *app );
 ~CWidget();

 void    Draw( Graphics *g );
 void    Update();
public:
 CApp    *mApp;
};

class CWidget;

class   CApp : public SexyAppBase
{
public:
 CApp();
 ~CApp();

 virtual void Init();
 virtual void LoadingThreadProc();
 virtual void LoadingThreadCompleted();

public:
 Image* mMapImg;
 CWidget* mWidget;
};

CApp::CApp()
{
 mWidth  =       550;
 mHeight =       650;
 mTitle  =       "APP";
 mNoSoundNeeded          = true;
 mAutoEnable3D       = true;
 mMapImg = NULL;
}

CApp::~CApp()
{
 mWidgetManager->RemoveWidget(mWidget);
 delete mWidget;
}

void CApp::Init()
{
 SexyAppBase::Init();
}

void CApp::LoadingThreadProc()
{

 //you must call this to enable all the transform function
 SWTri_AddAllDrawTriFuncs();

 //first, it should load resouces
 LoadResourceManifest();
 mResourceManager->StartLoadResources("Game");

 while (mResourceManager->LoadNextResource())
 {
  mCompletedLoadingThreadTasks++;

  //mLoadingWidget->MarkDirty();
 }

 if (mResourceManager->HadError() || !ExtractGameResources(mResourceManager))
 { 
  ASSERT(false);
  ShowResourceError(false);
  mLoadingFailed = true;

  return;
 }

 mMapImg = GetImageById( GetIdByStringId( "BACK_1" ) );
 ASSERT(mMapImg != NULL);
}

void CApp::LoadingThreadCompleted()
{
 SexyAppBase::LoadingThreadCompleted();

 if (mLoadingFailed)
  return;

 mWidget = new CWidget(this);
 mWidget->Resize(0, 0, mWidth, mHeight);
 mWidgetManager->AddWidget(mWidget);    
}


CWidget::CWidget( CApp *app )
{
 mApp = app;
}

CWidget::~CWidget()
{

}

void    CWidget::Draw( Graphics *g )
{
 // DrawImageF(img, 窗体坐标x, 窗体坐标y, Rect(图片坐标x, 图片坐标y, 宽, 高) )
 g->DrawImageF( mApp->mMapImg, 0, 0, Rect( 0, 0,
  550, 650 ) );
}

void    CWidget::Update()
{
 Widget::Update();
 MarkDirty();
}


int     WINAPI  WinMain( HINSTANCE      hInstance, HINSTANCE    hPrevInstance,
      LPSTR   lpCmdLine, int nCmdShow )
{

 gHInstance      =       hInstance;

 CApp    *app    =       new     CApp();

 app->Init();
 app->Start();

 delete  app;

 return 0;
}

//////////////////////////////////////////////////////////////////

 

 

popcap 多资源的加载


在resources.xml 的资源小节再加一个图片资源:

  <SetDefaults path="images/" idprefix="" />
  <Image id="BACK_FOG" path="back_fog" />


images 文件夹加一张图片back_fog.png

 

 BACK_1,和BACK_FOG 其实LoadingThreadProc()已经加载了,
 并不需要显示的用GetImageById( GetIdByStringId( "BACK_1" ) ) 来加载

//////////////////////////////////////////////////////////////////////////
void    CWidget::Draw( Graphics *g )
{
 g->DrawImageF( BACK_1, 0, 0, Rect( 0, 0,
  550, 650 ) );

 // BACK_FOG 大部分是透明的,这部分不会遮住BACK_1
 g->DrawImageF( BACK_FOG, 0, 0, Rect( 0, 0,
  550, 650 ) );
}

//////////////////////////////////////////////////////////////////////////

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值