日期:2014-05-20  浏览次数:20711 次

飞机游戏运行缓冲区问题!flyingghost(游魂)等高手速来解决
目前做拉个飞机飞行的小游戏
在电脑上运行没问题,在真机上就出问题
飞机是个精灵类,在线程中根据输入来控制飞机运行   delay=20
线程如下
  public   void   run()   {
          Graphics   g   =   getGraphics();
       
          while   (isPlay)   {
         
                  this.drawScreen(g);//重新绘制画面
                  g.setColor(0xffffff);
 
                  flushGraphics();
               
                  Planeinput();//按键输入来调整飞机位置控制飞行
       
                  try   {
                          Thread.sleep(delay);
                  }
                  catch   (InterruptedException   ie)   {}
          }
       
  }

根据flyingghost(游魂)解释,感觉确实应该开辟个缓冲区来进行绘制
但目前有几个疑问
1:现在飞机的精灵类开辟缓冲区?
2:我如何开辟缓冲区?
3:有没有例子,给我看看,完毕


------解决方案--------------------
我已经在你的原帖子回过了,顺便帮你贴过来吧:

其实缓冲区说白了,就是创建一个跟屏幕大小的Image,你原来怎么画到屏幕上的,不要改变,现在就怎么画到那个Image对象上,然后在把Image一次性的画到屏幕上,这样做可以节省程序画屏的时间,提高效率,但是要多耗一定的内存

------解决方案--------------------
书上有讲的
------解决方案--------------------
Image screenBuffer=Image.createImage(WIDTH,HEIHGT);//创建离线缓冲区
Graphics g=screenBuffer.getGraphics();//得到缓冲区的g点

g.drawdrawdrawdrawdraw.........//画。其实都画在screenBuffer上了。


repaint();//叫canvas重绘
serviceRepaints();//宁肯绘制速度降低游戏线程速度降低也不肯丢帧的话加上这句

public void paint(Graphics acturalG){//真正的paint方法里就一句:
actoralG.drawImage(screenBuffer,0,0,Graphics.LEFT|Graphics.TOP);
}

------解决方案--------------------
有个质疑,其实GameCanvas已经是实现双缓冲了。
以上的方法适用于普通的Canvas。
------解决方案--------------------
同问楼上的质疑