快速业务通道

J2ME游戏开发中的地图设计与绘制 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
E_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等游戏类型都可以使用.欢迎跟我探讨更多的游戏制作技术,我还将写一个关于动画的相关东东,不过最近没什么时间

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号