| 游戏中地图画法的优化 |
|
|
|
|
Author: 一滴蔚蓝色 | Date: 2008-05-10 | View: 496
|
开发技术 -
程序设计
| ||||
|
现在的游戏地图都做的比较大,这样一来我们就需要来优化地图的画法,来提高地图对内存的消耗和游戏速度。 现在通用的都是用一个tile数组来表示地图的。数组中每个值表示一个地图块,一般大小为16*16。 1.为了减少在屏幕中绘制地图的数量,在绘制地图时只绘制当前屏幕的部分。 方法:通过限定循环判断的起始点,结束点,来约束循环判断的总次数. 以前的做法是 for(int y=0;y<tile.length;y++) for(int x=0;x<tile[y].length;x++){ if(in_screen(y,x)){ draw tile[y][x]; } } 改进做法是只循环显示当前屏幕的部分: //全局变量 int TILE_W; // 地图块width; int TILE_H; // 地图块height; int screen_y; // 屏幕的Y; int screen_x;// 屏幕的X; int sx1,sx2,sy1,sy2; sx1 = screen_x / TILE_W; // 屏幕X在地图的第几块上。 if (sx1 < 0) sx1 = 0; sy1 = screen_y / TILE_H; // 屏幕Y在地图的第几块上。 if (sy1 < 0) sy1 = 0; sx2 = (screen_x + screen_w) / TILE_W; // 屏幕底边在地图的第几块上。 if ( (screen_x + screen_w) % TILE_W != 0) sx2 += 1; if (sx2 > tile_bottom[0].length) sx2 = tile_bottom[0].length; sy2 = (screen_y + screen_h) / TILE_H; // 屏幕右边在地图的第几块上。 if ( (screen_y + screen_h) % TILE_H != 0) sy2 += 1; if (sy2 > tile_bottom.length) sy2 = tile_bottom.length; //循环的起点屏幕X所在的地图块,终点是屏幕右边所在的地图块。 for (int y = sy1; y < sy2; y++) for (int x = sx1; x < sx2; x++) { draw tile[y][x]; } 举例, 如果地图大小为100x100, 单元尺寸为16x16, 屏幕为128x160 则原画法,每次刷新屏幕的循环次数为10000, 其中每次均需进行是否在屏幕内判断, 新画法,循环次数为80, 并且不需进行是否在屏幕内判断. 所以改进算法优势明显。特别是在三星系列的机型上。 “精簡了”的卡馬克 本文关键字: 游戏 地图 画法 优化 阅读数: 497 | 打印 | E-mail
|
||||||||
| (J2me手机游戏回合RPG游戏基本构架) < 上一篇 | 下一篇 > (优化后的图片插值算法) |
|---|