自-Java认证J2ME游戏开发的高级优化技巧

上传人:洛** 文档编号:184029652 上传时间:2021-06-16 格式:DOCX 页数:7 大小:13.40KB
返回 下载 相关 举报
自-Java认证J2ME游戏开发的高级优化技巧_第1页
第1页 / 共7页
自-Java认证J2ME游戏开发的高级优化技巧_第2页
第2页 / 共7页
自-Java认证J2ME游戏开发的高级优化技巧_第3页
第3页 / 共7页
自-Java认证J2ME游戏开发的高级优化技巧_第4页
第4页 / 共7页
自-Java认证J2ME游戏开发的高级优化技巧_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《自-Java认证J2ME游戏开发的高级优化技巧》由会员分享,可在线阅读,更多相关《自-Java认证J2ME游戏开发的高级优化技巧(7页珍藏版)》请在金锄头文库上搜索。

1、ava认证:J2M游戏开发的高级优化技巧J2ME游戏开发的高级优化技巧为什么要优化?游戏能够被划分为两种较广泛的类型:实时型和按键驱动型。按键驱动类型的游戏一般在屏幕上显示游戏目前所处的状态,并且等待玩家输入某些按键来驱动游戏继续运行。棋牌类游戏,大部分的解谜类游戏以及策略类和文字类游戏都属于这类游戏。而实时游戏,特别是动作游戏不会等待玩家的输入,他们一直运行直到游戏的结束。动作类游戏一个重要的特征就是将大量的运算花在屏幕显示上,而且刷新率(F)必须保持在0以上。这类游戏还必须要有大量的动作来使得游戏具有更高的挑战性。这类游戏需要玩家有快速的反应和很好的手眼协调能力,所以这类游戏对键盘输入的反

2、应也有极高的要求。为使得程序在高速运行时能对键盘做出及时的反应,图像能以高速的FP来运行,我们就必须优化我们的代码,以使得我们的程序能以最快的速度运行。JME是一个精简的Java版本,适合只有有限容量的小型设备,例如手机和PA,J2ME设备有:有限的输入能力屏幕尺寸很小受限的内存及堆大小很慢的CPU这些特点使得在J2E平台上编写快速的游戏并不是件易事。相对于电脑游戏来说,编写J2E平台上的游戏会对程序有更高的要求和更进一步的挑战。何时不用优化?如果你编写的游戏不时动作游戏,有可能不必去优化。假如玩家需要几秒钟甚至几分钟去思考他下一步怎样走,那他将不会注意到你的游戏的按键响应超过几百毫秒。不过一

3、个例外是如果你的程序需要大量的运算去决定它下一步怎样走,例如棋类游戏需要在几百万种组合中去寻找。假如这样的话,你有可能想要优化你的代码以使得电脑仅需要几秒钟而不是几分钟去决定他下一步的动向。即使你正在编写这类游戏,优化也是相当危险的。这些技术将伴随着高昂的代价,他将使你的代码不易读。这就需要开发者自己去平衡。增大了JR文件的大小来换取程序少量性能的提高是否是值得的。下面给出不要去优化的更多的理由。优化将很容易引入ug有些优化技术将使得移植变得困难有可能你付出了巨大的努力却收效甚微统一的优化一般比较困难我需要对最后一点做一些解释:由于优化的是一个不定的目标及平台,有些方法可能在Jaa平台上运行快

4、一点,而有些可能在2E平台上运行快一点。由于执行环境存在着巨大的差异,你的代码可能在模拟器上跑得很快,但是在真机上却很慢。反之也有可能。你对一种机型的优化可能会造成在另一种平台上性能的下降。但这些并不代表我们没有了希望。你可以通过两种方法来进行优化,高级优化和低级优化。高级优化可以在任意的平台上来提高程序的性能,甚至全面的提高代码的质量。而低级优化则是相对于某种特定机型的优化技术。高级优化即算法上的优化,低级优化即程序层面对于单个函数执行效率的优化。Michal Aa, Qak的开发者之一,曾经写到:“he best opimzr sbween yourers”。 (最好的优化者在你的两耳之间

5、)。使用优良的算法所能提高的效率比在一个普通算法的程序上使用低级优化所能提高的效率要高得多。我们将使用2M Wirls olkit的Prfile去剖析你的代码的运行效率,它也将帮助你更精确的测量出这些技术对于提高性能的有效性。在哪里优化?在动作类游戏中,90%的程序执行时间被花费在了0%的代码段中。这0的代码段是我们需要集中全力去优化的部分。我们将使用ofile去找到这0%代码的位置。照下图我们打开2ME Wirelssoolkit的Prler功能。我们必须要在模拟器中运行程序并退出后才会弹出Pofile窗口注意在左窗口中该函数所占用cpu百分比,这个百分比是总执行时间花在每个特定函数上的百分

6、比,接下来我们只要找到占用百分比最多的那个函数来优化就可以了。有几点需要注意的。首先:你的百分比数和我的肯定有很大的不同,但是有一点是相同的即花费时间最长的函数所占的百分比数最大。每次运行程序我的百分比数都会不同,为了尽可能的保持统一,我们在测试前应当关闭其他的程序。其次:测试时不要混淆,否则你将看到函数名类似于,,z.。最后:Prfiler并不知道你模拟的是什么机型。记住,真机才是真理。如何优化?知道了在那里优化,但如何进行优化呢?我们知道大部分的运算时间被花在了绘图函数上,J2ME已经为我们提供了这些函数,我们没有办法对这些函数的内部进行优化,但是我们仍然有选择权。下面我们来对2ME提供给

7、我们的绘图函数作一测试。在Canvas类里添加测试代码如下:protctdvoid pait(rahicsg) tPai(g);od TesPaint(Grphi g) setlip(g);setolor();m_o= gen();tFont(g);rawSng(g);dRet(g);fillRect(g);rwae();drRegin();draw(g);drawCar(g);rawLin(g);drawoundRet(g);filArc(g);filRouRe(g);void setClor(aphics g) g.setColo();oi drwrc(Grapicsg) .wrc(0,

8、0, 100, 100, 4, 4);void drawChr(Gis g) gdrwCr(你, , 0, G.TOPLET);void daoundec(rhics g) .raRudet(, , 100, 00, 4, );vodfilRoudRec(Gpicsg) g.fllRunet(0, 0, 0,100, 4);voi filAc(raic g) .fillArc(0,0,10, 0, 4,4);voiddraLi(Grpicsg) g.drawine(0,,1, 100);ont geont() turn Fontgetot(Font.FACE_STEM, Ft.SYLEI, F

9、nt.SIZ_SMALL);如何优化?知道了在那里优化,但如何进行优化呢?我们知道大部分的运算时间被花在了绘图函数上,2ME已经为我们提供了这些函数,我们没有办法对这些函数的内部进行优化,但是我们仍然有选择权。下面我们来对J2E提供给我们的绘图函数作一测试。在Cnvas类里添加测试代码如下:protected voi paint(Graphis g) Testint(g);vod Testant(Graphics g) setCp(g);setCr(g);_ont =getont();stont(g);drawSring();rawect(g);iRct(g);drawImag(g);draw

10、egion(g);drawArc(g);rwar(g);rawLine();drwondRet();filAr(g);fillundRct(g);void tolor(Gaphic g) .setCor();voidrawArc(Grpic g) gdawAc(0, 0, 100,00,4, 4);void drwhar(apis g)g.draCar(你, 0, GETOPLEFT);vod aRodRect(raphic g) rawRoudRe(0, 0, 10, 100, 4, 4);voifilRundRct(rphcs ) gfiloundRect(0, , 00, 00, 4, 4);vi fillAr(Graphics g)g.fllArc(0,0,10,100, , );void dwn(rphics) g.rLine(0, , 100, 100);o got()reurn Ft.getFont(Fot.FE_YSM, FotTYLE_PLAIN,Ft.IZE_SA);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 社会学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号