把地图指定点开始的一屏内容绘制到屏幕上

/** 地图最大的行数 */

#define mapRow 20

/** 地图最大的列数 */

#define mapCol 20

/** tile的个数 */

#define ImageNum 100

int mapArray[mapRow][mapCol]; /** 地图tile的索引 */

Image cellImage[ImageNum]; /** 所有的tile的图片 */

int cellsize; /** cellsize为地图tile的宽和高 */

int ScreenWidth; /** 屏幕的宽 */

int ScreenHeight; /** 屏幕的高 */

/**

leftTopX:地图X方向的位置

leftTopY:地图Y方向的位置

将地图上,点(leftTopX, leftTopY)开始的区域绘制到屏幕上

*/

void DrawAScreen(int leftTopX, int leftTopY)

{

/* 计算单元格起始位置下标 */

int iStart = leftTopY / cellSize; /** 起始行 */

int jStart = leftTopX / cellSize; /** 起始列 */

//计算单元格绘制宽度和高度

int iNum = ScreenWidth / cellSize + 1;

int jNum= ScreenWidth / cellSize + 1;

//防止下标越界

if (iStart + iNum >= mapRow)

iNum = mapRow - 1 - iStart;

if (jStart + jNum >= mapCol)

jNum = mapCol - 1 - jStart;

int i, j;

for (i = iStart; i < iNum; i++)

{

for (j = jStart; j < jNum; j++)

{

/** 将一个tile绘制到屏幕上 */

if (mapArray[i][j]>0)

drawImage(cellImage[mapArray[i][j] - 1], j * cellSize - leftTopX, i * cellSize - leftTopY);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值