ISprite接口学习笔记1
2010-04-30
ISprite接口用于渲染sprites(精灵)和tile maps(tile 地图)
一个sprite对象可以看做拥有各种附加属性的位图。附加的属性包括:该Sprite要绘制的位置,变
换方式和透明度等。
主要用于在游戏中绘制可以活动的人物和对象。
接口使用方式:
1、调用ISPRITE_SetSpriteBuffer()设置包含sprite的图像到ISprite缓冲中。
2、调用ISPRITE_DrawSprites()将缓冲中的sprite图像绘制出来。
ISPRITE_SetSpriteBuffer()函数说明:
函数原型:
int ISPRITE_SetSpriteBuffer(ISprite *po, uint8 unSpriteSize,
IBitmap *pbmSpriteBuffer);
函数用于设置sprite缓冲,告知sprite引擎去哪里查找特定大小的sprite图像。
sprite引擎为每个不同大小的sprite维护一个单独的缓冲。
参数说明:
1)po: ISprite接口对象
2)unSpriteSize: 缓冲区中sprite对象的大小(指单个sprite对象大小,
而不是缓冲区中整个图像的大小)
与AEESpriteCmd中的unSpriteSize字段对应。必须设定为
SPRITE_SIZE_n*n,对应相应的n*n像素大小的正方形图像。
3)pbmSpriteBuffer: 放到sprite缓冲中的位图,该位图包含着以单列方式排列的多个
大小为unSpriteSize的sprite图像。各个图像 以索引标示,索
引值从0开始,sprite引擎将在该位图缓冲中查找特定索引值的
sprite图像。
pbmSpriteBuffer设为NULL时,将强制sprite引擎释放相应的
sprite缓冲。
*可以通过多次调用ISPRITE_SetSpriteBuffer(),将一个ISprite接口关联多个sprite图像缓
冲。不过不同的sprite图像缓冲必须为不同size。绘制时分别用相应size的AEESpriteCmd对
象来对应。
ISPRITE_DrawSprites()函数说明:
函数原型:
int ISPRITE_DrawSprites(ISprite *po, AEESpriteCmd *pCmds);
该函数将导致在pCmds数组中的sprite对象绘制到ISPRITE_SetDestination()指定的
目标缓冲区中。sprite引擎将依次遍历pCmds 数组4次,第一次仅绘制数组中unLayer
字段为0的sprite,后续几遍再分别绘制1、2、3层。
pCmds数组必须以unSpriteSize设为SPRITE_SIZE_END的虚拟条目结束。
参数说明:
1)po: ISprite接口对象。
2)pCmds: AEESpriteCmd结构数组
AEESpriteCmd结构说明:
typedef struct {
int16 x;
int16 y;
uint16 unTransform;
uint8 unMatrixTransform;
uint8 unSpriteIndex;
uint8 unSpriteSize;
uint8 unComposite;
uint8 unLayer;
uint8 reserved[5];
} AEESpriteCmd;
各字段说明:
1)x ,y: sprite(没有变换过的no-Transformed)的左上角 在
目标位图上的坐标。即sprite要绘制到目标位图中的位置。
2)unTransform: 包含了sprite变换属性的组合。可以是以下任意一个或多
个属性的组合。
SPRITE_FLIP_X(上下翻转),
SPRITE_FLIP_Y(左右翻转),
SPRITE_ROTATE_90(逆时针翻转90。),
SPRITE_ROTATE_180(逆时针翻转180。),
SPRITE_ROTATE_270(逆时针翻转270。),
SPRITE_SCALE_2(放大2倍),
SPRITE_SCALE_4(放大4倍),
SPRITE_SCALE_8(放大8倍),
SPRITE_SCALE_EIGTH(缩小8倍),
SPRITE_SCALE_QUARTER(缩小4倍),
SPRITE_SCALE_HALF(缩小2倍),
3)unMatrixTransform: 转换表的索引。只有当字段unTransform 设为
SPRITE_MATRIX_TRANSFORM时才起作用。
4)unSpriteIndex: 要绘制的sprite图像(在sprite缓冲图像中)的索引。
在缓冲图像中,该sprite图像的坐标是:
x = 0, y = unSpriteIndex * [sprite图像高度],
这里的sprite图像高度为像素值,与unSpriteSize字段的
字面值相同。
5)unSpriteSize: sprite图像的大小(单个sprite图像)。格式为
SPRITE_SIZE_n*n,包括
SPRITE_SIZE_8*8
SPRITE_SIZE_16*16
SPRITE_SIZE_32*32
SPRITE_SIZE_64*64,分别对应不同的像素大小:
8*8像素,16*16像素…………。
unSpriteSize设为SPRITE_SIZE_END时,表示sprite
数组结束,sprite数组必须有一个元素的unSpriteSize字段
设为SPRITE_SIZE_END,来表示该数组的结束。
6)unComposite: 指定sprite的透明度:COMPOSITE_KEYCOLOR(透明),
COMPOSITE_OPAQUE(不透明)
7)unLayer: sprite的层次,目前分为4个现实层和一个隐藏层。
绘制sprite时,从SPRITE_LAYER_0开始,依次绘制到
SPRITE_LAYER_3层,设为SPRITE_LAYER_HIDDEN
表示不绘制当前sprite。
8)reserved: 预留,设为0。
AEESpriteCmd结构主要是用来描述ISprite接口中的sprite对象。理论上,每个sprite对象
对应图像源中的一个sprite图像。调用ISPRITE_DrawSprites()函数时,ISprite会将pCmds
数组中所有的sprites对象都绘制出来。
当ISprite接口设置了多个图像缓冲源时,ISprite会根据AEESpriteCmd结构中unSpriteSize
字段设定的大小来区分不同的图像源。