canvas教程

Java ME技术讨论区(3)

字号+ 作者:H5之家 来源:H5之家 2017-10-23 12:13 我要评论( )

注意 画笔风格不影响填充、文本和图像的绘制操作。 3.1.9 双缓冲技术双缓冲技术是编写J2ME游戏程序的关键技术之一。实际上,双缓冲技术是计算机动画的一项传统技术。造成屏幕 闪烁的主要原因在于,画面在显示的同时

注意
画笔风格不影响填充、文本和图像的绘制操作。

3.1.9 双缓冲技术双缓冲技术是编写J2ME游戏程序的关键技术之一。实际上,双缓冲技术是计算机动画的一项传统技术。造成屏幕 闪烁的主要原因在于,画面在显示的同时程序又在改变它,于是画面闪烁。
解决办法是在内存中开辟一片区域作为后台画面,程序对它更新、修改,完成后再显示它。这样被显示的图像永远是 已经完全画好的图像,程序修改的将不是正在被显示的图像。当然还有其他方法可以解决屏幕闪烁问题,但使用双缓冲技术是一种值得推荐的解决方案。
有些设备本身就支持双缓冲,每次都是先把屏幕重画在缓冲之中,然后再绘制在显示屏幕上,而不是直接绘制在显示 屏幕上。可以使用Canvas类的isDoubleBuffer方法判断设备是否具有双缓冲。
可变图像可以很容易地用作屏幕外缓冲。改写前面绘制不变图像的代码,将所有的绘制都放在可变图像中,然后一次 性地将可变图像绘制到屏幕上去。
package doublebufferdemo;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import java.io.*;
public class ImageCanvas extends Canvas
{
private Image buffer;                         //可变图像,作为绘制缓冲
private Image image;                          //不变图像,用来加载图片文件
public ImageCanvas()
{
       try
       {
         image = Image.createImage("/tree.png"); //加载图片文件
       }catch(java.io.IOException e)
       {
         System.out.println(e.getMessage());      //处理I/O异常
       }
       buffer = Image.createImage(this.getWidth(), this.getHeight());
                                                //用一个可变图像作为绘制缓冲
       Graphics bg = buffer.getGraphics();        //获取缓冲的Graphics对象
       bg.setColor(0xFFFFFF);
       bg.fillRect(0, 0, getWidth(), getHeight());    //填充整个屏幕
       bg.drawImage(image,this.getWidth()/2,this.getHeight()/2, Graphics.VCENTER|Graphics.HCENTER);
}
public void paint(Graphics g)
{
       g.drawImage(buffer,0,0,g.TOP|g.LEFT);      //将缓冲区上的内容绘制到屏幕上
}
}
编译、运行程序,其结果和前面完全相同,但是却采用了双缓冲技术。对于双缓冲的使用,可以总结出以下几点。
n     定义一个Graphics对象bg和一个Image对象buffer,按屏幕大小建立一个缓冲对象赋给buffer,然后取得buffer的 Graphics对象赋给bg。在这里,Graphics对象可以理解为缓冲的屏幕,Image对象则可当成缓冲屏幕上的图片。
n     在bg(缓冲屏幕)上用drawImage()和drawString()等语句画图,相当于在缓冲屏幕上画图。
n     调用repaint()语句,它的功能是告知系统调用paint()来完成真实屏幕的显示。这里需要注意的是,paint()是一个系统调用语句,不能手 工调用,只能通过paint()语句来调用。
n     在paint(Graphics g)函数里,将buffer(缓冲屏幕上的图片)画到真实屏幕上。
以上的步骤虽然看似繁琐,但是效果还是很不错的。如果想在屏幕上显示什么东西,只要画在bg上,然后调用 repaint()将其显示出来就可以了。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • canvas.drawBitmap参数

    canvas.drawBitmap参数

    2017-09-13 18:00

  • [教学视频]Canvas动画和手机游戏开发

    [教学视频]Canvas动画和手机游戏开发

    2017-08-29 16:01

  • 绘图效率问题 Canvas?OpenGL?

    绘图效率问题 Canvas?OpenGL?

    2016-10-21 18:00

  • 怎样在canvas 上添加Button呢?

    怎样在canvas 上添加Button呢?

    2016-03-27 10:00

网友点评
a