【教程21】使用图片打包工具



掌叔
2009-07-21 10:25:09

摘自:[url]www.iacger.com[/url]
作者:[url=http://www.yayabo.cn/sns/space.php?uid=129]newcreat[/url]

需求:为了不然别人看到游戏图片内容,减少文件数量,会用到图片打包工具。
本节讲述[url=http://www.yayabo.cn/sns/space.php?uid=419]白枫[/url]制作的[url=http://www.yayabo.cn/forum-8-1.html]NGE2[/url]图片打包工具的使用。

使用很简单:
1 加载资源包,会加载资源信息
[code=c]
packInit("DATA.BIN");// 把资源包信息加载到内存
[/code]
2 打开资源包与得到该资源里某个图片的大小:
[code=c]
//这里开一个独立的fd,需要自己释放,本例用
//设置image_load_fp的第三个参数为1来释放这个fd
int fd = packOpenAsync("demo0.jpg"); // 得到资源包里图片的文件指针
int size = packSize("demo0.jpg"); // 得到资源包里图片的大小
[/code]
3调用图片load的fp的函数(字体文件也可以)
注意用packOpenAsync打开的需要自己释放,这里给
设置image_load_fp的第三个参数autoclose为1来释放这个fd
[code=c]
if(fd>0 && size>0)
bg = image_load_fp(fd,size,1,DISPLAY_PIXEL_FORMAT_8888,1);
[/code]
4 资源包不用后就可以释放了
[code=c]
//清除
packFini();
[/code]
[code=c]
#include "libnge2.h"
#include "package.h"

image_p bg = NULL;

void DrawScene();
void btn_down(int keycode);
void btn_up(int keycode);

extern "C"
int main(int argc,char* argv[])
{
NGE_Init(INIT_ALL);
InitInput(btn_down,btn_up,1);

packInit("DATA.BIN"); // 把资源包加载到内存
//这里开一个独立的fd,需要自己释放,本例用
//设置image_load_fp的第三个参数为1来释放这个fd
int fd = packOpenAsync("demo0.jpg"); // 得到资源包里图片的文件指针
int size = packSize("demo0.jpg"); // 得到资源包里图片的大小

// 从文件读取图片
if(fd>0 && size>0)
bg = image_load_fp(fd,size,1,DISPLAY_PIXEL_FORMAT_8888,1);

while(1) {
InputProc();
DrawScene();
LimitFps(60);
}

image_free(bg);
bg = NULL;
//清除
packFini();
NGE_Quit();
return 0;
}

void DrawScene()
{
BeginScene(1);
if(bg) ImageToScreen(bg,0,0);
EndScene();
}

void btn_down(int keycode)
{
switch(keycode)
{
case PSP_BUTTON_UP:
break;
case PSP_BUTTON_DOWN:
break;
case PSP_BUTTON_LEFT:
break;
case PSP_BUTTON_RIGHT:
break;
case PSP_BUTTON_TRIANGLE:
break;
case PSP_BUTTON_CIRCLE:
break;
case PSP_BUTTON_CROSS:
break;
case PSP_BUTTON_SQUARE:
break;
case PSP_BUTTON_SELECT:
break;
case PSP_BUTTON_START:
break;
}
}

void btn_up(int keycode)
{
switch(keycode)
{
case PSP_BUTTON_UP:
break;
case PSP_BUTTON_DOWN:
break;
case PSP_BUTTON_LEFT:
break;
case PSP_BUTTON_RIGHT:
break;
case PSP_BUTTON_TRIANGLE:
break;
case PSP_BUTTON_CIRCLE:
break;
case PSP_BUTTON_CROSS:
break;
case PSP_BUTTON_SQUARE:
break;
case PSP_BUTTON_SELECT:
break;
case PSP_BUTTON_START:
break;
}
}
[/code]
剩下的部分请看源代码

最后说下包制作工具:
在最新的libnge2的tool目录下有,本例下面的包里也有请先看说明,比较简单
[attach]1485[/attach]