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

刚做的飞机游戏,遇到问题,请指教!
主要就是飞机飞行的问题
主线程控制变化为:delay=20
  public   void   run()   {
          Graphics   g   =   getGraphics();
       
          while   (isPlay)   {
         
                  this.drawScreen(g);
                  g.setColor(0xffffff);
 
                  flushGraphics();
                  if   (buls.collidesWith(plane))
                  {              
                  this.Gameover(g);
               
                  flushGraphics();
                  isPlay=false;
                  }
                  Planeinput();
                  buls.fly();
                  try   {
                          Thread.sleep(delay);
                  }
                  catch   (InterruptedException   ie)   {}
          }
       
  }

问题:目前在电脑上运行没问题,速度正常
在手机上飞行速度大大降低,并且按方向钮控制还会有延迟

是内存问题还是什么,请指教,谢谢

------解决方案--------------------
估计是你框架有问题。现在的机能运行个入门级别的飞机游戏还是足够的。
虚拟机用一个线程处理UI。也就是说,这一个线程要做绘制屏幕的工作以及按键处理的工作。这样,如果你绘制屏幕很频繁,必然会影响到按键处理的即时相应。反过来也同理。
一般的处理办法是,尽量降低这个线程处理的工作强度。比如,按键事件中只记录相关按键信息,不处理涉及游戏逻辑的东西。游戏绘图改为画在一个离线缓冲区上,paint中只做把缓冲区输出到屏幕的工作。这样,做的事情一样多,但尽量转移系统UI线程的压力,可以得到快速的按键反应以及可控的屏幕刷新率。

顺便:游戏主线程逻辑处理最好不要和刷新率挂钩。否则在不同绘制能力的机器上,将会得到天壤之别的游戏速度。
------解决方案--------------------
其实缓冲区说白了,就是创建一个跟屏幕大小的Image,你原来怎么画到屏幕上的,不要改变,现在就怎么画到那个Image对象上,然后在把Image一次性的画到屏幕上,这样做可以节省程序画屏的时间,提高效率,但是要多耗一定的内存