BREW ISprite接口学习笔记2

来源:互联网 发布:恢复数据软件的标志 编辑:程序博客网 时间:2024/06/03 19:48

2010-04-30

 

一个tile map可以看做多个位图(tiles)组成的二维矩阵。所有的位图都具有相同的大小,并且相互之间无缝连接。

一个tile map可以表示成一个索引数组。元素在数组中的位置决定了该tile要在哪里绘制,而该元素保存的索引值则

决定了哪一个tile将被绘制。

不仅数组中的每个tile元素可以关联附加属性,比如透明度和简单的变换方式,而且,整个tile map也可以设定不同

的属性,比如绘制的偏移量,tile的大小,和是否自动滚动等。

 

tile map主要在游戏中绘制游戏背景。

 

主要涉及函数:

1)ISPRITE_SetTileBuffer()

2)ISPRITE_DrawTiles()

3)ISPRITE_SetTransformTable()

 

 

ISPRITE_SetTileBuffer()

函数原型:

int ISPRITE_SetTileBuffer(ISprite *po, uint8 unTileSize, IBitmap *pbmTileBuffer);


函数用于告知sprite引擎到哪里(pbmTileBuffer)查找特定大小的tile图像。sprite引擎为不同大小的tile维护

一个单独的缓冲区。tile在该图像缓冲区中以单列的形式进行排列,如同sprite一样。同样的,tile索引的作用与

sprite索引的作用一样,都用于定位不同的tile。

 

参数说明:

1)po:ISprite接口对象。

2)unTileSize:tile图像的大小(单个),与Sprite解释相同。

3)pbmTileBuffer:用于关联到ISprite接口的图像源。与Sprite解释相同。当设置为NULL时,将强制释放

关联的图像源。

 

ISPRITE_DrawTiles()

 

函数原型:

int ISPRITE_DrawTiles(ISprite *po, AEETileMap *pMaps);

函数用于将pMaps数组中的tile maps绘制到指定缓冲区。数组中的每个元素都描述了一个tile map对象。

sprite引擎会遍历该数组一次。

pMaps中必须有一个元素的pMapArray字段设为NULL,表示该数组结束。

 

参数说明:

1)po:ISprite接口对象。

2)pMaps:AEETileMap结构的数组。

 

typedef struct {

uint16 *pMapArray;

uint32 unFlags;

uint32 reserved[4];

int32 x;

int32 y;

uint16 w;

uint16 h;

uint8 unTileSize;

uint8 reserved2[3];

} AEETileMap;

 

参数说明:

1)pMapArray:tile图像索引和属性的数组。它是二维tile矩阵的一维表示。数组中的每个元素

包含了相应tile的索引和属性。

每个元素的低10位表示tile在图像源中的索引:

TILE_INDEX_MASK和TILE_INDEX_NOTHING(0x03FF)

都表示不在该位置上绘制tile

高6为表示该tile的变换属性:

TILE_FLIP_X、TILE_FLIP_Y、(横向、竖向变换)

TILE_ROTATE_90、TILE_ROTATE_180、TILE_ROTATE_270(逆向旋转)

TILE_TRANSPARENT

每个元素的pMapArray都是以上一个或几个属性的组合。

当pMapArray设为NULL时,表示数组结束,该结构的其他字段此时无效。

2)unFlags:整个tile map的属性,目前只有MAP_FLAG_WRAP属性有效,表示可以连续显示。

3)reserved:预留属性,必须设为0。

4)x,y:要绘制到屏幕上的整个tile map的左上角坐标,相对于屏幕左上角坐标(0,0)的偏移量。

注意,地图的大小一般比屏幕的要大(减少地图重绘次数),所以y有可能为负值,

表示超出屏幕大小的位置。这一点与sprite有所区别。

位图:

5)w,h:整个tile map的大小,定义tile的个数,相当于tile矩阵的列数和行数。

使用MAP_SIZE_*表示。 *为2

6)unTileSize:每个tile的大小,表示为TILE_SIZE_*。

7)reserved2:预留位,必须设置为0。

 

ISPRITE_SetTransformTable()

 

函数原型:

int ISPRITE_SetTransformTable(ISprite *po, AEETransformMatrix *pTransformTable);