优化J2ME中的paint()函数

我们经常会遇到这样的问题,在模拟器上跑得很好的程序在实际的手机上却很慢,甚至运行不了,这大多数是因为重画机制的使用不当所致,J2ME中的paint()函数起到了画屏幕的作用,往往在需要动画的情况下非常频繁地需要调用,而且在一些低端手机或移动设备上面,对于paint()函数的频繁调用会引起相应时间长甚至无法正常工作等问题。所以,对于paint()函数的优化就显得特别重要。这里,我们提出几点优化paint()函数的方法和注意事项,在编程中大家可以参考:

1.不要在paint()函数当中使用耗时的操作,比如:

try{
  Image image_Splash = Image.createImage("/back.png");
  g.drawImage(image_Splash, 0, 0,Graphics.TOP | Graphics.LEFT);
  }
  catch(Exception ex) {
  }

其中的创建图片的方法由于需要IO操作非常费时,因此要尽量避免,创建操作只在初始化的时候做一遍。

2.使用像素较小的图片,一般来书,颜色种类少的图片显示时间就少,因此,尽量避免使用256色以上的图片,一些色调丰富,过度缓慢的图片往往需要 多种像素来满足需求,因此,尽量使用卡通图片,或者转换成256或16色的图片,会减少绘图时间。

3.局部刷新, 每次的重画repaint()都要调用paint(),而并不是每一次repaint()都要重画整个屏幕,因此有时候之需要重画部分屏幕即可,这又有两种方法可以实现,第一种是利用Clip,Clip是一个矩形的绘图区域,当重绘时,仅仅重绘这个区域以内的内容,而不管其他部分,因此可以节省操作,可 以通过setClip()等函数设定绘图区域。

另外可以通过repaint( x,y,width,height )来重画指定的某一个区域,这个函数实际上也是设定了某一个重绘Clip(),不过使用起来会更加方便。

4.减少repaint()的次数,尽量只在产生作用的时候才重画。

5.将paint()函数的部分内容提到外面来做,使得重画减少计算量和操作。

6.使用双缓存技术,某些设备本身就支持双缓存技术,判断设备是否支持双缓存可以用Canvas类的isDoubleBuffered()方法。实现双缓存可以使用Image 类的可变图像技术。如,利用:

image = Image.createImage( width, height );
Graphics g = image.getGraphics();

来建立一个可变图像,它和Canvas一样都能够得到Graphics绘图对象的绘制。而且可以不在paint()函数里面,这一点非常重要。可以在init()中放入绘图语句,或者放到一个单独的函数中,把图片绘制到屏幕外缓冲当中,然后在paint()函数中仅仅是把这个Image绘制到当前的Canvas里面了,这样就可以节省很多计算操作。比如:

public void paint(Graphics g){
g.translate(x - g.getTranslateX(), y - g.getTranslateY());//设置当前坐标系统
g.drawImage(image,0,0,g.TOP|g.LEFT);
g.translate(x - g.getTranslateX(), y - g.getTranslateY());//改回原来的坐标系统
}

时间: 2024-07-30 13:26:14

优化J2ME中的paint()函数的相关文章

怎样优化J2ME程序当中的paint()函数

我们经常会遇到这样的问题,在模拟器上跑得很好的程序在实际的手机上却很慢,甚至运行不了,这大多数是因为重画机制的使用不当所致,J2ME中的paint()函数起到了画屏幕的作用,往往在需要动画的情况下非常频繁地需要调用,而且在一些低端手机或移动设备上面,对于paint()函数的频繁调用会引起相应时间长甚至无法正常工作等问题.所以,对于paint()函数的优化就显得特别重要.这里,我们提出几点优化paint()函数的方法和注意事项,在编程中大家可以参考:1.不要在paint()函数当中使用耗时的操作,

如何用matlab遗传算法优化simulink中的参数

问题描述 如何用matlab遗传算法优化simulink中的参数 我想用matlab遗传算法优化simulink中的参数,用simulink的输出作为适值函数,把待优化的参数作为染色体,从而在matlab中实现遗传算法,但是不知道应该怎么把simulink和matlab联系起来,希望大家能帮我解决这个问题.

在 SQL Server 2005 中使用表值函数来实现空间数据库

server|函数|数据|数据库 Gyorgy Fekete 和 Alex Szalay约翰霍普金丝大学 Jim GrayMicrosoft(联系作者) 适用于Microsoft SQL Server 2005 摘要:本文说明了如何使用 C# 和表值函数将空间搜索函数("邻近点的点"和"多边形内的点")添加到 Microsoft SQL Server 2005.使用此库可以在不编写任何特殊代码的情况下向应用程序中添加空间搜索.此库实现了来自约翰霍普金丝大学的公共域

J2ME中Random类的使用

dom 在J2ME中,由于大部分的游戏都会涉及到随机性的事件,Random类自然就成为J2ME程序员经常使用的一个类了.但是对于新手来说,Random类看似简单,也有可能会出现这样那样的错误.所以在这里把我对于这个类的使用心得总结一下. random类在CLDC1.0中就已经定义了.这个类有两个构造函数Random() 和Random(long seed) 并且提供了四个常用方法: next(int bits) nextInt() nextLong() setSeed(long seed) 其中

javase-请大神帮忙看下,为什么MyPanel中的Paint方法没有被调用

问题描述 请大神帮忙看下,为什么MyPanel中的Paint方法没有被调用 package javademo; import javax.swing.*; import java.awt.*; public class DrawDemo extends JFrame{ MyPanel mp = null; public static void main(String []args){ DrawDemo drawdemo = new DrawDemo(); } public DrawDemo(){

在SQL server的性能优化过程中的常见技巧

在SQL server 的http://www.aliyun.com/zixun/aggregation/14109.html">性能优化过程中,TSQL的语句优化是很重要的一环.当您使用各种手段找出系统最需要优化的语句后,应该如何对该语句进行优化呢?下面列出一些TSQL 语句优化的常见技巧. 1. 语句的执行计划分析 首先要对该语句的执行计划(execution plan)进行分析,找出语句运行慢的原因.比如说, <>在检查执行计划是否包含table scan /index

新手java问题,paint函数是怎样被调用的?没有见到调用代码啊

问题描述 新手java问题,paint函数是怎样被调用的?没有见到调用代码啊 package cn.lzc.test; import java.awt.Frame; import java.awt.Graphics; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class GameFrame extends Frame { private static final long seri

《深入理解Hadoop(原书第2版)》——3.5Hadoop作业中的第三方函数库

3.5Hadoop作业中的第三方函数库 到目前为止,在Mapper和Reducer类中只使用了标准Java函数库和Hadoop函数库.这些标准函数库包括了Hadoop发行版中的类库和标准Java类库(比如String.class). 可是,仅仅使用这些标准函数库不能够开发复杂的Hadoop作业程序,有时我们需要第三方库的支持.如前所述,Mapper和Reducer类中使用的这些库需要被发送并配置到集群中运行Mapper和Reducer实例的所有节点. 首先,你要编写一个跟介绍过的代码不同的使用第

J2ME中的时间处理全攻略

攻略 时间处理在程序开发中相当常见,下面对于时间处理做一个简单的说明. 一.时间的表达方式时间在J2ME中有两种表达方式:1. 以和GMT1970年1月1号午夜12点和现在相差的毫秒数来代表这种方式适合比较两个时间之间的差值.2.  以对象的形式来表达二.时间处理的相关类时间处理在J2ME中涉及三个类:1.  System类long time = System. currentTimeMillis();使用该方法可以获得当前时间,时间的表达方式为上面提到的第一种. 2.  Date类Date d