·天新网首页·加入收藏·设为首页
首页|笔记本|手机|数码相机|摄像机|MP3/MP4|主板|内存|显示器|办公|打印机|下载|开发|汽车|学院|业界
硬件|台式机|数码|数字家庭|投影仪|GPS/CPU|显卡|硬盘|服务器|网络|一体机|驱动|源码|游戏|考试|报价
您现在的位置:天新网 > 软件开发 > Java开发 > J2ME > 程序设计
J2ME开发手机游戏:宝石方块
http://dev.21tx.com 2004年03月24日

1 2 3 4 5 下一页

  不久前我曾用J2ME开发了一个MotoT720下的彩色游戏:宝石方块(GridOne)。开发过程中积累了一些经验,现在写出来与大家分享。


  使用双缓冲避免屏幕闪烁


  双缓冲技术是编写J2ME游戏程序的关键技术之一。实际上,双缓冲技术是计算机动画的一项传统技术。造成屏幕闪烁的主要原因在于,画面在显示的同时,程序又在改变它,于是画面闪烁。解决办法就是在内存中开辟一片区域作为后台画面,程序对它更新,修改,完成后再显示它。这样被显示的图像永远是已经完全画好的图像,程序修改的将不是正在被显示的图像。当然还有其它方法可以解决屏幕闪烁问题,但使用双缓冲技术是一种值得推荐的解决方案。具体方法可参见如下代码:


public class BlocksCanvas extends Canvas implements Runnable
{
 Graphics bg;
 Image buf;
 public BlocksCanvas()
 {
  ......
  height = getHeight();
  width = getWidth();
  //按屏幕大小建立缓冲对象
  buf = Image.createImage(width, height);
  //将缓冲对象的Graphics附给bg
  bg = buf.getGraphics();
  ......
 }
 public void run()
 {......
  for(i=0;i {
   for(j=0;j {//画方块
    drawBlock(x,y);
   }
  }
  repaint();
 }
 private void drawBlock(int block_x, int block_y)
 {
  //取得方块的坐标
  int x = getLeft(block_x);
  int y = getTop(block_y);
  //取得方块的颜色
  int c= board[block_x][block_y];
  bg.drawImage(imgs[c], x, y, Graphics.TOP | Graphics.LEFT);
 }


 public void paint(Graphics g)
 {
  g.drawImage(buf, 0, 0, Graphics.TOP | Graphics.LEFT);
 }
}


  由上面代码可见,双缓冲思想体现在程序上就是要依次完成以下几步工作:


  1. 定义一个Graphics对象bg和一个Image对象buf,按屏幕大小建立一个缓冲对象附给buf,然后取得buf的Graphics对象附给bg。在这里,Graphics对象可以理解为缓冲的屏幕,Image对象则可当成缓冲屏幕上的图片。


  2. 在bg(缓冲屏幕)上用drawImage()和drawString等语句画图,相当于在缓冲屏幕上画图。


  3. 调用repaint()语句,它的功能是告知系统调用paint()来完成真实屏幕的显示。这里需要注意的是,paint()是一个系统调用语句,不能手工调用,只能通过paint()语句来调用。


  4. 在paint(Graphics g)函数里,将buf(缓冲屏幕上的图片)画到真实屏幕上。


  以上的步骤虽然看似繁琐,但是效果还是很不错的。如果想要在屏幕上显示什么东西,只管画在bg上,然后调用repaint()将其显示出来就可以了。



1 2 3 4 5 下一页

Google
 
热点文章
关于我们 | 联系我们 | 广告服务 | 工作机会 | 版权声明 | 欢迎投稿 | 网站地图
Copyright © 2000-2008 , www.21tx.com , All Rights Reserved .
© 晨新科技 版权所有 Created by TXSite.net