仓酷云

标题: JAVA网页设计J2ME游戏开辟中的舆图计划与绘制 [打印本页]

作者: 冷月葬花魂    时间: 2015-1-18 11:12
标题: JAVA网页设计J2ME游戏开辟中的舆图计划与绘制
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解计划  在开辟良多范例的游戏中,舆图体系都必要优秀的计划,直不雅的说,我们必要的舆图体系仅仅是一个2D数组,然后用最快的体例将数组暗射到屏幕上。游戏中的舆图一般不是由程序员用键盘输出到程序里然后再在程序中修正然后再修正的狂乱历程,而是一样平常先由程序员做一个舆图编纂器,在这个舆图编纂器顶用鼠标点点点,再保留的历程,大概是从收集高低载的一些成熟编纂器好比:mappy如许的工具天生舆图,再用剧本言语为mappy写一个应当保留成甚么样格局的程序。一般舆图分为45度角,侧视角和仰望角等等,45度角的也有良多种,这类视角绝对仰望角和侧视叫较庞大,我们次要会商仰望角,实在侧视叫和仰望角次要的区分是图片的体现作风纷歧样,好比雷电如许的空战就是仰望角,mario如许的游戏就是侧视角,能够用不异的舆图编纂器做出来。综上,你要晓得游戏舆图不是程序员用程序写出来的,你喜好写也能够,修正起来较贫苦,也不克不及像资本一样静态办理而是一次性读进到内存里,对照不爽。
在这个文章内里,我们假定我们的2D数组是经由过程,资本读掏出来的,内容以下:
publicstaticbyte[][]B_MAZE_2D_ARRAY={
{
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
,{
0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
,{
0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
,{
0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
,{
0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0}
,{
0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0}
,{
0,1,0,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0}
,{
0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0}
,{
0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0}
,{
0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0}
,{
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
  这个舆图中一共0,1两种byte数,0代表一种图块,1代表一种图块,也能够是动绘图块,你绘制的时分区分一下就能够了。由于我们程序内里想把这全部图形绘制出来的话有N多种计划,我给出两个对照公道的计划,固然第二种是对照优化的.我们假定你的配角一向在屏幕中心,当你配角挪动的时分,舆图响应的变更,就是说配角为参照物,舆图动.我们晓得舆图的巨细要凌驾屏幕的,我们必要设定一个坐标体系,我的办法是,以左上角为0,0也就是和我们经常使用的Canvas的坐标体系是不异的,我们的图块巨细为:ELEMENT_WIDTH,ELEMENT_HEIGHT,以是我们全部舆图的面积(相对面积)是ELEMENT_WIDTH*横坐标的块数*ELEMENT_HEIGHT*纵坐标的块数。因而,我们把这么年夜的题丹青在屏幕上时,必要把必要画的坐标面积(也就是屏幕面积)从这个舆图中拿出来,其他中央被切除,这就对照的高效了。
  办法一:轮回全部2维数组,不必要的中央不绘制只绘必要的部分:
intkI=0;//暗示
intkJ=0;
//nEleStartedX,nEleStartedY暗示从2DArray哪一个地位入手下手绘制舆图
for(inti=nEleStartedY;i<B_MAZE_2D_ARRAY.length;i++){
kJ=0;
//是不是必要绘制
booleanisDrawed=false;
for(intj=nEleStartedX;j<B_MAZE_2D_ARRAY[i].length;j++){
//绘制必要的面积,N_MAZE_ELEMENT_WIDTH,N_MAZE_ELEMENT_HEIGHT暗示图块宽高
intbX=nMapStartedX+j*N_MAZE_ELEMENT_WIDTH;
intbY=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在舆图相对面积上的坐标
intnArrayI=(-N_MAZE_ELEMENT_HEIGHT-nMapStartedY)/
N_MAZE_ELEMENT_HEIGHT;
intnArrayJ=(-N_MAZE_ELEMENT_WIDTH-nMapStartedX)/
N_MAZE_ELEMENT_WIDTH;
for(inti=nArrayI;
i<SCREEN_HEIGHT/N_MAZE_ELEMENT_HEIGHT+2;i++){
for(intj=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{
intbX=nMapStartedX+j*N_MAZE_ELEMENT_WIDTH;
intbY=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等游戏范例都可使用.接待跟我切磋更多的游戏制造手艺,我还将写一个关于动画的相干东东,不外比来没甚么工夫

你说是sun公司对她研究的透还是微软?针对自己工具开发的.net性能上肯定会站上风的。
作者: 若相依    时间: 2015-1-20 17:13
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者: 不帅    时间: 2015-1-27 13:02
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
作者: 爱飞    时间: 2015-1-28 09:19
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
作者: 老尸    时间: 2015-2-2 16:04
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者: 愤怒的大鸟    时间: 2015-2-8 00:43
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
作者: 小女巫    时间: 2015-2-23 19:48
Java 编程语言的风格十分接近C、C++语言。
作者: 山那边是海    时间: 2015-2-27 21:01
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
作者: 变相怪杰    时间: 2015-3-6 20:39
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
作者: 简单生活    时间: 2015-3-13 08:09
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
作者: 柔情似水    时间: 2015-3-20 17:17
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2