正 文

J2ME游戏开发中的地图设计与绘制


www.7dspace.com  更新日期:2006-1-11 1:23:13  七度空间


  方法一:循环整个2维数组,不需要的地方不绘制只绘需要的部分:

     int kI = 0;// 表示
     int kJ = 0;
//nEleStartedX, nEleStartedY表示从2D Array哪个位置开始绘制地图
     for (int i = nEleStartedY; i < B_MAZE_2D_ARRAY.length; i++) {
       kJ = 0;
//是否需要绘制
       boolean isDrawed = false;
       for (int j = nEleStartedX; j < B_MAZE_2D_ARRAY[i].length; j++) {
//绘制需要的面积,N_MAZE_ELEMENT_WIDTH,N_MAZE_ELEMENT_HEIGHT表示图块宽高
         int bX = nMapStartedX + j * N_MAZE_ELEMENT_WIDTH;
         int bY = nMapStartedY + i * N_MAZE_ELEMENT_HEIGHT;
//SCREEN_WIDTH,SCREEN_HEIGHT屏幕大小
         if (bX <= SCREEN_WIDTH
             &&
             bY <= SCREEN_HEIGHT
             &&
             bX >= -N_MAZE_ELEMENT_WIDTH
             &&
             bY >= -N_MAZE_ELEMENT_HEIGHT
             ) {
           g.drawImage(mapImages[B_MAZE_2D_ARRAY[i][j]], bX,
                       bY,
                       Graphics.TOP | Graphics.LEFT);//绘制图块
           isDrawed = true;
           kJ++;
// N_MAX_MAZE_ITEM_X , N_MAX_MAZE_ITEM_Y屏幕面积内图块的最大值
           if (kJ > N_MAX_MAZE_ITEM_X + 2) {
             break;
           }

         }
       }
       if (isDrawed) {
         kI++;
       }
       if (kI > N_MAX_MAZE_ITEM_Y + 2) {
         break;
       }

     }

  方法二:事先找到需要绘制的横坐标纵坐标的图块编号(2DArray的数组下标),循环屏幕面积大小的数组:

    //  需要绘制的2DArray左上角位置,nMapStartedX,nMapStartedY在地图绝对面积上的坐标
    int nArrayI = ( -N_MAZE_ELEMENT_HEIGHT - nMapStartedY) /
        N_MAZE_ELEMENT_HEIGHT;
    int nArrayJ = ( -N_MAZE_ELEMENT_WIDTH - nMapStartedX) /
        N_MAZE_ELEMENT_WIDTH;
    for (int i = nArrayI;
         i < SCREEN_HEIGHT / N_MAZE_ELEMENT_HEIGHT + 2; i++) {
      for (int j = nArrayJ;
           j < SCREEN_WIDTH / N_MAZE_ELEMENT_WIDTH + 2; j++) {

        if (i < 0 || j < 0 || i > B_MAZE_2D_ARRAY.length ||
            j > B_MAZE_2D_ARRAY[0].length) {
          continue;
        }
        else {
          int bX = nMapStartedX + j * N_MAZE_ELEMENT_WIDTH;
          int bY = nMapStartedY + i * N_MAZE_ELEMENT_HEIGHT;
          g.drawImage(mapImages[B_MAZE_2D_ARRAY[i][j]], bX,
                      bY,
                      Graphics.TOP | Graphics.LEFT);

        }
 }
 }

  根据我的测试,方法一的地图面积越大fps掉的越为厉害,而方法二基本上不会掉fps,强烈推荐方法二.

  地图系统做好了之后,你就可以使用地图做更多的表现力了,只要改变nMapStartedX,nMapStartedY,就可以绘制出地图上的相应部分,代码的复用效率非常的高。RPG, SLG, PUZZLE等游戏类型都可以使用.欢迎跟我探讨更多的游戏制作技术,我还将写一个关于动画的相关东东,不过最近没什么时间

2页,页码:[1] [2] 

上一篇:J2ME开发手机游戏物理模型之抛物线
下一篇:Win XP中如何自动终止Blackice防火墙
作者:gaogao  来源:J2ME开发网 ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐