终于讲到Sprite精灵了,我自己也很希望快点讲精灵,但是欲速则不达,自己要是还没研究透彻这个知识点就去讲下一个,感觉文章肯定是写不好的。
我用下图来做演示,SFC幽游白书-魔界最强列传里的雷禅:
怎么处理图片已经演示的很清楚了,前面也有讲过,不明白的可以到SGDK/bin里查看rescomp.txt这个文档。
怎么把图片设置成精灵呢,先把需要的精灵放到工程根目录下的res文件夹里,然后在res文件夹里新建一个resources.res文件,用记事本打开,在里面写上:
SPRITE hq "hq.png" 8 8 0
SPRITE是代表这个资源的类型,hq是这个资源的名字(写成黄泉的缩写了,应该叫lc.png,不要在意这些细节),在代码里用到的话就写hq,双引号内的是文件路径,8 8是这个图片横着数有几个tile,竖着数有几个tile,这个雷禅分辨率是64x64,除以8,所以就是8 8了,最后的0代表压缩级别,0是不压缩,也是质量最好的。
接着在工程根目录下的src文件夹里新建main.c,开始撸代码:
#include <genesis.h>
#include <vdp.h>
#include <sprite_eng.h>
#include "resources.h" //resources.res文件自动生成的头文件//声明一个精灵变量
Sprite *sprite_hq = NULL;//位置
s16 px = 0;
s16 py = 0;//输入管理
void HandleInput();//打印位置信息
void PrintMessage();int main()
{//初始化sprite,默认VRAM内有512个tile缓存区,内存中有320个tile缓存区,//要是需要自己设置tile缓存区可以用void SPR_initEx(u16 vramSize, u16 unpackBufferSize);//注:这一句初始化一定要写,不然显示会乱码SPR_init();//设置PAL1调色板为hq.palette->data,hq是SpriteDefinition类型的结构体:详情可定位到头文件查阅// typedef struct// {// Palette* palette;// u16 numAnimation;// Animation** animations;// u16 maxNumTile;// u16 maxNumSprite;// } SpriteDefinition;VDP_setPalette(PAL1, hq.palette->data);//背景太黑了,改成灰色VDP_setBackgroundColor(3);//给精灵变量赋值,后面这几个参数不再详细赘述,前面讲绘制图片时有讲到过类似的sprite_hq = SPR_addSprite(&hq, px, py, TILE_ATTR(PAL1, 0, FALSE, FALSE));while (1){//输入管理HandleInput();//更新精灵,一定要写这一句,不要忘记,否则对精灵的操作都是无效的,并且也不会显示精灵SPR_update();//在屏幕打印出精灵的坐标信息PrintMessage();VDP_waitVSync();}return 0;
}//前面有讲过input,很简单,大家看看就行
void HandleInput()
{u16 input = JOY_readJoypad(JOY_1);if (input & BUTTON_UP){py--;}if (input & BUTTON_DOWN){py++;}if (input & BUTTON_LEFT){px--;}if (input & BUTTON_RIGHT){px++;}//void SPR_setPosition(Sprite* sprite, s16 x, s16 y);//s16是shortSPR_setPosition(sprite_hq, px, py);
}//打印位置信息
void PrintMessage()
{//存储x坐标char msg_x[25];//存储y坐标char msg_y[25];//把坐标格式化成字符串分别存到俩msg数组中,这里只写%hd不行,必须在%后面加上一个数字//否则得到的坐标会变得很诡异,可以自行试一下sprintf(msg_x, "sprite pos x : %6hd", px);sprintf(msg_y, "sprite pos y : %6hd", py);//略过VDP_drawText(msg_x, 1, 22);VDP_drawText(msg_y, 1, 23);
}
注:精灵的默认顶点是图片左上角。
编译,得到rom.bin,用模拟器打开,就可以用方向键控制精灵移动了^_^
未完待续。。。
复古游戏开发群:879063892