J2ME手机游戏开发技巧(1)

2007-03-23     推荐:103277    收藏:66817    评论:148     来源:J2ME开发网 

不久前我曾用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附给bgbg = 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()将其显示出来就可以了。 编写自己的断点函数。

498)this.style.width=498;'' onmousewheel = ''javascript:return big(this)'' src="/files/uploadimg/20070322/1412040.jpg">
图1:断点测试

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

public class BlocksCanvas extends Canvas implements Runnable{

private boolean stopFlag=false;

//调试标志......public void run()

{//断点位置1testFun(“x:”+x+“y:”+y);

......//断点位置2testFun(“”);......

}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;} }


您可以针对本文进行:[评论]  [收藏]  [推荐]   [查看原文链接]  
  • [148楼] 2008-04-29 11:53:16.0  网友
  • [回复]
  • http://www.youtube.com/user/nicholdont |http://www.youtube.com/user/adriandebrahg |http://www.youtube.com/user/nenahazelburk
    http://www.youtube.com/user/avelinacynthi |http://www.youtube.com/user/hisakomittie
  • [147楼] 2008-04-29 04:11:53.0  网友
  • [回复]
  • http://www.youtube.com/user/nicholdont |http://www.youtube.com/user/adriandebrahg |http://www.youtube.com/user/nenahazelburk
    http://www.youtube.com/user/avelinacynthi |http://www.youtube.com/user/hisakomittie
  • [146楼] 2008-04-29 02:21:45.0  网友
  • [回复]
  • http://www.youtube.com/user/nicholdont |http://www.youtube.com/user/adriandebrahg |http://www.youtube.com/user/nenahazelburk
    http://www.youtube.com/user/avelinacynthi |http://www.youtube.com/user/hisakomittie
  • [145楼] 2008-04-29 00:42:42.0  网友
  • [回复]
  • http://www.youtube.com/user/nicholdont |http://www.youtube.com/user/adriandebrahg |http://www.youtube.com/user/nenahazelburk
    http://www.youtube.com/user/avelinacynthi |http://www.youtube.com/user/hisakomittie
  • [144楼] 2008-04-23 10:23:56.0  网友
  • [回复]
  • http://cgyxcrg.dreamstation.com/map.html |http://cgyxcrg.dreamstation.com/2map.html
    http://cgyxcrg.dreamstation.com/3map.html |http://cgyxcrg.dreamstation.com/4map.html
    http://cgyxcrg.dreamstation.com/5map.html
  • [143楼] 2008-04-22 10:11:55.0  网友
  • [回复]
  • paris france music <a href= http://hooooo.php0h.com/tablet144.html >eddie cruisers music</a> free format windows music
    types of music therapy [url= http://nili.aokhost.com/pharmacy284.html ]free holiday music radio stations[/url] sound of music clothes pattern
    new kicks music <a href= http://nili.aokhost.com/pill239.html >name of a music reporter</a> xbox ned for speed underground music
    pain music [url= http://utk.idoo.com/pharmacy131.html ]video game music downloads[/url] night music fall
  • [142楼] 2008-04-20 13:24:58.0  网友
  • [回复]
  • yo8mF2  <a href="http://hedbaskbhxzy.com/">hedbaskbhxzy</a>, [url=http://mqulfacdgzlg.com/]mqulfacdgzlg[/url], [link=http://vazjzvhyyfrt.com/]vazjzvhyyfrt[/link], http://upaivtvelyck.com/
  • [141楼] 2008-04-20 10:01:38.0  网友
  • [回复]
  • http://cgyxcrg.dreamstation.com/2map.html
    http://cgyxcrg.dreamstation.com/3map.html
    http://cgyxcrg.dreamstation.com/4map.html
    http://cgyxcrg.dreamstation.com/5map.html
  • [140楼] 2008-04-19 11:59:44.0  网友
  • [回复]
  • irish music dublin 4 <a href= http://yiiii.yourfreehosting.net/audio72.html >nedley music</a> bad boys 2 electronic music
    mathematical music [url= http://yiiii.yourfreehosting.net/audio28.html ]downloading mp3 music[/url] gay music bands
    music theory exam handbook <a href= http://yiiij.fr33webhost.com/drugs245.html >purchase mp3 music download</a> teclado music
    free sleep music [url= http://nili.aokhost.com/poker4.html ]star wars sheet music for trombone[/url] music of handels grazioso
  • [139楼] 2008-04-19 10:55:39.0  网友
  • [回复]
  • bFI0QK  <a href="http://ogsmznmmrxcx.com/">ogsmznmmrxcx</a>, [url=http://vcuhifvlknoy.com/]vcuhifvlknoy[/url], [link=http://grtrvgwwxziw.com/]grtrvgwwxziw[/link], http://nxghjahqtwap.com/
  • 共有148条评论  点击查看更多评论
  • 网友评论仅供网友表达个人看法,并不表明e800同意其观点或证实其描述
我想发表评论:
用户名密码
  • 匿名发表
    验证码: