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

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

    #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、付费专栏及课程。

余额充值