NDS开发Wiki翻译:第四天:精灵(2)



掌叔
2008-06-06 15:27:02

摘自:[url]http://chenyi1976.spaces.live.com[/url]
翻译:陈轶

使用PAGfx转化

想知道Cool一点的消息吗?如果精灵能被直接使用到DS上,而不用任何修改。。。抱歉让你失望了,停止白日梦吧。这就是我要介绍的,你将看到如何转化一个精灵到DS的格式,并不是很复杂。。。


我们将要使用的使用的是PAGfx,由Mollusk和Kleevah创建的转换工具,用起来再简单不过了。有2种方法使用它,一种给初学者通过GUI界面使用,另一种给高级用户的,只有一个PAGfx.ini文件。两种用法的结果是一样的,不用担心。

PAGfx的GUI界面

第一件事情,进入PAlib/Tools目录,可以看到PAGfx目录。里面有4个文件。

* PAGfx.txt,一个使用说明和更新日志,既然你在看我的指南,因此你压根用不上这个。
* PAGfx.ini,转化用的ini文件,我将在第二部分进行分析。
* PAGfx.exe,根据ini文件转化你的精灵,你稍后将看到如何操作。
* PAGC Frontend.exe,工具的GUI界面,请马上打开它。

如果出现了出错提示,那是因为你没有安装.net框架,请下载
现在,打开GUI工具,看到界面如下:

[attach]26[/attach]

下面就是设置背景色,添加精灵文件,然后转化。(译:使用过程中可能出现异常,我换几个bmp文件试试,结果又好了)

你可以看到转化后产生如下文件:

* SpriteName.c是包含全部精灵信息的文件,将被用于将精灵调入内存。
* SpriteName.pal.c包含着调色板,有它你就能使用正确的颜色将精灵调入内存。
* all_gfx.c是个很酷的文件。它实际上是链接了所有的精灵,背景,调色板。
* all_gfx.h包含了精灵的数据,后面会提到

PAGfx.ini

对那些好奇的人们,你现在可以检查一下由GUI工具创建的PAGfx.ini。。。如果你只想用GUI工具,那么请跳过此节

(译:因为我只想用GUI工具,因此我跳过,见谅。)

PAlib精灵

我们深入浅出地学习,先试试把基本的精灵显示到屏幕上来看看。后面的教程会继续教你如何旋转和放大精灵,设置透明度和动画。保持耐心。

显示


我们最终真正使用DS硬件的时机来啦!嘎嘎嘎!我好邪恶!下面欢迎显示精灵教程登场。。。

下面的例子是重PAlib 0.72a版本中提取,因为我在这个版本中更新了精灵。。。请在开始之前确保安装了这个或更高的版本,否则就玩不转了。

打开PAlibExamples/Sprites/Sprite目录,并看一下main.c的代码:

[code=c]#include

// PAGfxConverter Include
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"

int main(void){

PA_Init(); //PAlib inits
PA_InitVBL();

PA_LoadSpritePal(0, // Screen
0, // Palette number
(void*)sprite0_Pal); // Palette name

PA_CreateSprite(0, // Screen
0, // Sprite number
(void*)vaisseau_Sprite, // Sprite name
OBJ_SIZE_32X32, // Sprite size
1, // 256 color mode
0, // Sprite palette number
50, 50); // X and Y position on the screen

while(1) // Infinite loops
{
PA_WaitForVBL();
}
return 0;
}[/code]

入你所见,看看注释就明白了!我也不想重新介绍第一天已经介绍的东西(请复习模板编码的部分),因此假设你已经明白了。

[code=c]// PAGfxConverter Include
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"[/code]

这一部分include你已经转化完成的图像,没什么可说的了(你可以看看这个gfx/目录里面都有些什么)

[code=c]PA_LoadSpritePal(0, // Screen
0, // Palette number
(void*)sprite0_Pal); // Palette name[/code]

这部分很重要:它装载了精灵!它把精灵调色板加载到0号屏幕(下屏幕)的0号调色板上。。。不要管在调色板名称前的(void*)字样,它仅仅用于指定调色板的位置。。。如果你的精灵显示不出来,那么首先就要看看是不是忘了调色板!而且,请注意调色板号不要搞错了(要知道一共有16个调色板呢)

[code=c]PA_CreateSprite(0, // Screen
0, // Sprite number
(void*)vaisseau_Sprite, // Sprite name
OBJ_SIZE_32X32, // Sprite size
1, // 256 color mode
0, // Sprite palette number
50, 50); // X and Y position on the screen[/code]


这个例子真是非常简单,让我一项一项解释一下。

* 第一个参数是0号屏幕(下屏幕)。。。如果你试图在上屏幕装载精灵,它不会被显示出来,为什么呢?因为调色板是装载在下屏幕的!
* 第二个参数是精灵编号,就象前文所说,DS在一个屏幕上可以显示128个精灵,编号从0到127。每个你创造的精灵,你都可以制定它的编号,有了编号,我们就能找到对应的精灵从而对它进行各种处理。编号的作用不止如此,它还决定了精灵之间的前后关系(0号精灵将遮住其他所有精灵,1号精灵能遮住0号以外的其他所有精灵,依次类推),越小的编号越在前。
* 下面是对象大小,它由长和宽组成,用起来有点复杂,因此PALib定义了一些宏来方便使用(以OBJ_SIZE开头)。。。如果不清楚有哪些尺寸可用,请翻到这个教程的开头。。。
* 下面是颜色模式。只有2个值可选:0为16色,1为256色。实际上只用256色。
* 下面是调色板编号。例子里面是0。。。如果你选择了错误的调色板编号,那么你会看到你的精灵的颜色是多么地漂亮(使用了其他的调色板)或者压根看不到精灵(选中了没有加载的调色板)。使用的时候请多注意。
* 下面是X坐标,Y坐标。精灵的左上角的坐标。


基本上所有的东西都已经理解了吧!那么让我们运行build.bat,并打开DS或DS模拟器。。。。因为你的死循环 (while(1)...) 里面没有任何代码(除了VBL以外),你的精灵将会呆在那里动也不动。

在进行下一步之前,你可以试试修改一下例子,让精灵出现在上屏幕,然后出现在上下双屏幕上。。。

(译:待续。。。)


t236846681
2009-07-24 10:24:53

学习,精灵就是由N个像素构成的可移动的东西。