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

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

需求:为了不然别人看到游戏图片内容,减少文件数量,会用到图片打包工具。
本节讲述白枫制作的NGE2图片打包工具的使用。

使用很简单:
1 加载资源包,会加载资源信息
[code="libnge2"]
packInit("DATA.BIN");// 把资源包信息加载到内存
[/code]

2 打开资源包与得到该资源里某个图片的大小:
[code="libnge2"]
//这里开一个独立的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="libnge2"]if(fd>0 && size>0)
                bg = image_load_fp(fd,size,1,DISPLAY_PIXEL_FORMAT_8888,1);[/code]
4 资源包不用后就可以释放了
[code="libnge2"]
//清除
packFini();
[/code]
==============================================
[code="libnge2"]
#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目录下有,本例下面的包里也有请先看说明,比较简单
附件: 您需要登录才可以下载或查看附件。没有帐号?注册[请认真填写注册原因]
Loli的大哥哥~~

up

TOP

是不是可以做的简单点

#        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);  

这些应该可以简化成

bp = packgetImage("demo0.jpg", DISPLAY_PIXEL_FORMAT_8888) 这个样子吧~~~~~~~
{:3_54:}
我是新手我怕谁~~~~~

TOP

本帖最后由 白枫 于 2009-7-17 22:57 编辑

经菜菜叔提醒特别把过程包装了一下,得到图片更简单
image_p image = packImage(filename,disp);
请newcreat大更新一下
附件: 您需要登录才可以下载或查看附件。没有帐号?注册[请认真填写注册原因]

TOP

支持,白叔和n叔!
AMP官方论坛

TOP

请问在用ncmake的时候会有类似
test.o: In function `NGE_main':
test.cpp:(.text+0x278): undefined reference to `packInit'
test.cpp:(.text+0x2b8): undefined reference to `packOpenAsync'
test.cpp:(.text+0x2c4): undefined reference to `packSize'
test.cpp:(.text+0x324): undefined reference to `packFini'
的错误,生成不了eboot.pbp,但在vc6下却能编译,这是为何?

TOP

因为你makefile没有加上 "package.o"

TOP

7# 白枫


恩,改成这样就可以 OBJS =         test.o CppSQLite3.o

TOP

GMT+8, 2010-9-7 08:39, Processed in 0.017023 second(s), 8 queries, Gzip enabled.

Powered by Discuz! 7.2© 2001-2009 Comsenz Inc.京ICP备08105566号