MyException - 我的异常网
当前位置:我的异常网» J2ME » J2ME游戏开发的高级优化技巧,该怎么解决

J2ME游戏开发的高级优化技巧,该怎么解决

www.MyException.Cn  网友分享于:2013-01-19  浏览:6次
J2ME游戏开发的高级优化技巧
本文将讲述代码优化对于编写高效的手机游戏的重要性。我将使用例子来为大家讲述何时使用何种方法来优化你的代码,使得我们的程序尽可能的挖掘MIDP在手机中所剩无几的表现力。我们将会看到如何使用J2ME   Wireless   Toolkit的Profiler功能来找出优化代码的位置,最后我会给出编写J2ME程序的忠告。  
  为什么要优化?

  游戏能够被划分为两种较广泛的类型:实时型和按键驱动型。按键驱动类型的游戏一般在屏幕上显示游戏目前所处的状态,并且等待玩家输入某些按键来驱动游戏继续运行。棋牌类游戏,大部分的解谜类游戏以及策略类和文字类游戏都属于这类游戏。而实时游戏,特别是动作游戏不会等待玩家的输入,他们一直运行直到游戏的结束。

  动作类游戏一个重要的特征就是将大量的运算花在屏幕显示上,而且刷新率(FPS)必须保持在10以上。这类游戏还必须要有大量的动作来使得游戏具有更高的挑战性。这类游戏需要玩家有快速的反应和很好的手眼协调能力,所以这类游戏对键盘输入的反应也有极高的要求。为使得程序在高速运行时能对键盘做出及时的反应,图像能以高速的FPS来运行,我们就必须优化我们的代码,以使得我们的程序能以最快的速度运行。

  J2ME是一个精简的Java版本,适合只有有限容量的小型设备,例如手机和PDA,J2ME设备有:

  ·有限的输入能力

  ·屏幕尺寸很小

  ·受限的内存及堆大小

  ·很慢的CPU

  这些特点使得在J2ME平台上编写快速的游戏并不是件易事。相对于电脑游戏来说,编写J2ME平台上的游戏会对程序有更高的要求和更进一步的挑战。

  何时不用优化?

  如果你编写的游戏不时动作游戏,有可能不必去优化。假如玩家需要几秒钟甚至几分钟去思考他下一步怎样走,那他将不会注意到你的游戏的按键响应超过几百毫秒。不过一个例外是如果你的程序需要大量的运算去决定它下一步怎样走,例如棋类游戏需要在几百万种组合中去寻找。假如这样的话,你有可能想要优化你的代码以使得电脑仅需要几秒钟而不是几分钟去决定他下一步的动向。

  即使你正在编写这类游戏,优化也是相当危险的。这些技术将伴随着高昂的代价,他将使你的代码不易读。这就需要开发者自己去平衡。增大了JAR文件的大小来换取程序少量性能的提高是否是值得的。下面给出不要去优化的更多的理由。

  ·优化将很容易引入bug

  ·有些优化技术将使得移植变得困难

  ·有可能你付出了巨大的努力却收效甚微

  ·统一的优化一般比较困难

  我需要对最后一点做一些解释:由于优化的是一个不定的目标及平台,有些方法可能在Java平台上运行快一点,而有些可能在J2ME平台上运行快一点。由于执行环境存在着巨大的差异,你的代码可能在模拟器上跑得很快,但是在真机上却很慢。反之也有可能。你对一种机型的优化可能会造成在另一种平台上性能的下降。

  但这些并不代表我们没有了希望。你可以通过两种方法来进行优化,高级优化和低级优化。高级优化可以在任意的平台上来提高程序的性能,甚至全面的提高代码的质量。而低级优化则是相对于某种特定机型的优化技术。高级优化即算法上的优化,低级优化即程序层面对于单个函数执行效率的优化。Michael   Abrash,   Quake的开发者之一,曾经写到: "the   best   optimizer   is   between   your   ears ".   (最好的优化者在你的两耳之间).使用优良的算法所能提高的效率比在一个普通算法的程序上使用低级优化所能提高的效率要高得多。

  我们将使用J2ME   Wireless   Toolkit的Profiler去剖析你的代码的运行效率,它也将帮助你更精确的测量出这些技术对于提高性能的有效性。

  在哪里优化?

  在动作类游戏中,90%的程序执行时间被花费在了10%的代码段中。这10%的代码段是我们需要集中全力去优化的部分。我们将使用profiler去找到这10%代码的位置。照下图我们打开J2ME   Wireless   Toolkit的Profiler功能。

  我们必须要在模拟器中运行程序并退出后才会弹出Profiler窗口,如下图:

        http://develop.csai.cn/mobile/images/20068116488.jpg
        http://develop.csai.cn/mobile/images/20068119877.jpg
        http://develop.csai.cn/mobile/images/20068115456.jpg
注意在左窗口中该函数所占用cpu百分比,这个百分比是总执行时间花在每个特定函数上的百分比,接下来我们只要找到占用百分比最多的那个函数来优化就可以了。
  


------解决方案--------------------
晕啊,楼主直接转个连接就好啦
------解决方案--------------------
不错,有所收获,顶一下
------解决方案--------------------
好好的关注。。这也是我以后的发展方向呀。。。
------解决方案--------------------
我对手机游戏开发也很感兴趣
------解决方案--------------------
楼主不错哈
·尽可能的使用 < <和> > 来代替*和/!

  ·使用位操作来代替%运算!

  ·与0比较比与其他数值比较快!

  ·数组存取比C语言慢,尽可能不在循环中存取数组!

真正的底层优化
------解决方案--------------------
呵呵,不错,支持。

另外需要特别关注上层的优化,一个垃圾的上层处理可能将所有的这些优化带来的节省全部浪费掉。
------解决方案--------------------
收藏了 mark

文章评论

Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
那些争议最大的编程观点
那些争议最大的编程观点
我的丈夫是个程序员
我的丈夫是个程序员
我是如何打败拖延症的
我是如何打败拖延症的
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
为什么程序员都是夜猫子
为什么程序员都是夜猫子
总结2014中国互联网十大段子
总结2014中国互联网十大段子
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
一个程序员的时间管理
一个程序员的时间管理
程序员应该关注的一些事儿
程序员应该关注的一些事儿
程序员和编码员之间的区别
程序员和编码员之间的区别
Java程序员必看电影
Java程序员必看电影
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
鲜为人知的编程真相
鲜为人知的编程真相
 程序员的样子
程序员的样子
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
程序员必看的十大电影
程序员必看的十大电影
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
老程序员的下场
老程序员的下场
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
漫画:程序员的工作
漫画:程序员的工作
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
编程语言是女人
编程语言是女人
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
每天工作4小时的程序员
每天工作4小时的程序员
10个调试和排错的小建议
10个调试和排错的小建议
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
程序员都该阅读的书
程序员都该阅读的书
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有