科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道J2ME游戏开发的高级优化技巧

J2ME游戏开发的高级优化技巧

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文将讲述代码优化对于编写高效的手机游戏的重要性。我将使用例子来为大家讲述何时使用何种方法来优化你的代码,使得我们的程序尽可能的挖掘MIDP在手机中所剩无几的表现力。

作者:egxsguo 来源:51CTO.com 2007年9月4日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

如何优化?

知道了在那里优化,但如何进行优化呢?我们知道大部分的运算时间被花在了绘图函数上,J2ME已经为我们提供了这些函数,我们没有办法对这些函数的内部进行优化,但是我们仍然有选择权。下面我们来对J2ME提供给我们的绘图函数作一测试。

在Canvas类里添加测试代码如下:

protected void paint(Graphics g) {

 TestPaint(g);

}

   void TestPaint(Graphics g) {

 setClip(g);

 setColor(g);

 m_font = getFont();

 setFont(g);

 drawString(g);

 drawRect(g);

 fillRect(g);

 drawImage(g);

 drawRegion(g);

 drawArc(g);

 drawChar(g);

 drawLine(g);

 drawRoundRect(g);

 fillArc(g);

 fillRoundRect(g);

}

void setColor(Graphics g) {

 g.setColor(0);

}

void drawArc(Graphics g) {

 g.drawArc(0, 0, 100, 100, 4, 4);

}

void drawChar(Graphics g) {

 g.drawChar('你', 0, 0, GE.TOPLEFT);

}

void drawRoundRect(Graphics g) {

 g.drawRoundRect(0, 0, 100, 100, 4, 4);

}

void fillRoundRect(Graphics g) {

 g.fillRoundRect(0, 0, 100, 100, 4, 4);

}

void fillArc(Graphics g) {

 g.fillArc(0, 0, 100, 100, 4, 4);

}

void drawLine(Graphics g) {

 g.drawLine(0, 0, 100, 100);

}

Font getFont() {

 return Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL);

}

void setFont(Graphics g) {

 g.setFont(m_font);

}

void drawString(Graphics g) {

 g.drawString("你好", 0, 0, GE.TOPLEFT);

}

void drawRect(Graphics g) {

 g.drawRect(0, 0, 100, 100);

}

void setClip(Graphics g) {

 g.setClip(0, 0, 300, 300);

}

void fillRect(Graphics g) {

 g.fillRect(100, 0, 100, 100);

}

void drawImage(Graphics g) {

 g.drawImage(GE.m_images[GRes.PNG_MAP], 0, 100, GE.TOPLEFT);

}

void drawRegion(Graphics g) {

 g.drawRegion(GE.m_images[GRes.PNG_MAP], 0, 0, 100, 100,

Sprite.TRANS_MIRROR,100, 100, GE.TOPLEFT);

}

该程序各函数分别绘制100*100的图形,经过一段时间以后,退出应用程序,我们得到如下图数据:

根据Profiler窗口所显示的数据,我们发现drawString最耗时。其次是drawRegion,所以我们应尽量避免使用drawString函数。

通过Profiler对各种函数及程序的测试,我总结如下结论:

◆仅当你需要的时候才去优化代码!

◆仅优化那些最耗时的代码!

◆使用Profiler去查找哪里需要优化! 

◆记住Profiler不代表真机上的优化结果,使用System Timer来在真机上做最后的测试!

◆在做低级优化之前,总是要先思考算法是否是最优!

◆绘图是很占用时间的,所以尽可能的减少Graphics函数的调用!

◆尽可能的使用SetClip()来减少绘图区域,相对于SetClip(),drawImage()所花的时间会更可观!

◆尽可能的将变量定义在循环以外!

◆尽最大可能的进行对需要的数据进行预先计算并将结果保存在缓冲里!

◆String类很容易产生垃圾内存,尽可能的使用StringBuffer代替String或用final static来定义之!

◆假设是不被接受的,一切要以真机为据!

◆尽量使用static final修饰函数,而避免synchronized修饰符!

◆对于频繁调用的函数要使用尽可能少的参数!

◆尽可能的不使用函数调用!

◆尽可能的使用<<和>>来代替*和/!

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

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

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

◆局部变量比其他类型的变量运算要快!

◆在switch()中尽量使用连续的小数值判断!

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章