canvas教程

J2ME游戏开发技巧

字号+ 作者:H5之家 来源:H5之家 2015-10-16 18:04 我要评论( )

文章标题:J2ME游戏开发技巧。中国IT实验室JAVA频道是一个专业的JAVA技术平台,着眼于业界尖端技术,提供及时全面的JAVA技术和资讯文章,为广大的JAVA爱好者提供

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

不久前我曾用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<ROWS;i++) { for(j=0;j<COLS;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 断点测试

  在开发J2ME程序过程中,最困扰人的问题就是程序容易莫名其妙地死机。当使用JBuilder或者CodeWarrior设置断点功能来查找程序错误时,死机的概率就更大了。即使不死机,也会担心程序受到了意外的干扰,所以一般不推荐使用开发工具自带的断点功能。但有时候又需要一个功能来显示当前各变量的值,以便查错时做出正确的判断。于是我想了一个办法,就是编写自己的断点函数。具体代码如下:

public class BlocksCanvas extends Canvas implements Runnable { private boolean stopFlag=false;//调试标志 ...... public void run() { //断点位置1 testFun(“x:”+x+“y:”+y); ...... //断点位置2 testFun(“”); ...... } private void testFun(String str) { stopFlag=true; //画一个白色长方形 bg.setGrayScale(255); bg.fillRect(0,0, fontW, fontH); //在白色长方形上显示str的内容 bg.setGrayScale(0); bg.drawString(str, 0,0, Graphics.TOP | Graphics.LEFT); repaint(); while(stopFlag){} } public void keyPressed(int keyCode) { stopFlag=false; } }

 

[1] [2] [3] 下一页

【责编:Peng】

 

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

相关文章
  • html5canvas核心技术图形、动画与游戏开发源码

    html5canvas核心技术图形、动画与游戏开发源码

    2017-05-02 17:42

  • canvas游戏开发学习之四:应用图像

    canvas游戏开发学习之四:应用图像

    2017-04-29 16:00

  • HTML5游戏开发案例教程 -互联网+职业技能系列

    HTML5游戏开发案例教程 -互联网+职业技能系列

    2017-03-22 17:00

  • HTML5游戏开发之Canvas 开发入门

    HTML5游戏开发之Canvas 开发入门

    2017-03-21 12:00

网友点评
/