怎样在Android开发中FPS游戏实现的两种方式比较
 怎样在Android开发中FPS游戏实现的两种方式比较
 
如何用Android平台开发FPS游戏,其实现过程有哪些方法,这些方法又有哪些不同的地方呢?首先让我们先了解下什么是FPS
英文名:FPS (First Personal Shooting)
第一人称视角射击游戏顾名思义就是以玩家的主观视角来进行射击游戏。玩家们不再像别的游戏一样操纵屏幕中的虚拟人物来进行游戏,而是身临其境的体验游戏带来的视觉冲击,这就大大增强了游戏的主动性和真实感。早期第一人称类游戏所带给玩家的一般都是的屏幕光线的刺激,简单快捷的游戏节奏。随着游戏硬件的逐步完善,以及各种类游戏的不断结合。第一人称射击类游戏提供了更加丰富的剧情以及精美的画面和生动的音效。例如我们玩的CS、Quake系列、UT系列、荣誉勋章、使命召唤、DOOM、彩虹6号、杀手47系列、穿越火线、反恐精英Online等等游戏。
 
 
| 01 | privatebooleandrawall=false; | 
| 02 |  privateRefreshHandler mRedrawHandler = newRefreshHandler(); | 
| 03 |     classRefreshHandler extendsHandler { | 
| 04 | 
| 05 |         @Override | 
| 06 |         publicvoidhandleMessage(Message msg) { | 
| 07 |          KetrisCanvas.this.update(); | 
| 08 |          KetrisCanvas.this.invalidate(); | 
| 09 |         } | 
| 10 | 
| 11 |         publicvoidsleep(longdelayMillis) { | 
| 12 |          this.removeMessages(0); | 
| 13 |             sendMessageDelayed(obtainMessage(0), delayMillis); | 
| 14 |         } | 
| 15 |     }; | 
| 16 |     longmLastMove=0; | 
| 17 |     longmMoveDelay=30; | 
| 18 |     publicvoidupdate() { | 
| 19 |             longnow = System.currentTimeMillis(); | 
| 20 | 
| 21 |             if(now - mLastMove > mMoveDelay) { | 
| 22 |                 //gameLogic(); 这里是游戏逻辑 | 
| 23 |               | 
| 24 |                 mLastMove = now; | 
| 25 |             } | 
| 26 |             mRedrawHandler.sleep(mMoveDelay); | 
| 27 |         | 
| 28 |     } | 
| 29 | publicvoidonDraw(Canvas canvas) | 
| 30 | {super.onDraw(canvas); | 
| 31 |  this.paint(); //这里是绘制到缓冲屏幕 | 
| 32 |  canvas.drawBitmap(g.offs, 0, 0, g.p); | 
| 33 | } | 
2. [代码][Java]代码 跳至 [1] [2] [全屏预览]
| 01 | publicclassKetrisCanvas extendsSurfaceView implementsSurfaceHolder.Callback | 
| 02 | 
| 03 | {  | 
| 04 | 
| 05 | 在构造方法完成   下面2句 | 
| 06 |      holder = this.getHolder();//获取holder | 
| 07 |      holder.addCallback(this); | 
| 08 | 
| 09 | 
| 10 | @Override | 
| 11 | publicvoidsurfaceChanged(SurfaceHolder holder, intformat, intwidth, | 
| 12 |   intheight) { | 
| 13 |  // TODO Auto-generated method stub | 
| 14 |   | 
| 15 | } | 
| 16 | 
| 17 | Thread t; | 
| 18 | booleanisrun=true; | 
| 19 | finalSurfaceHolder holder; | 
| 20 | @Override | 
| 21 | publicvoidsurfaceCreated(SurfaceHolder holder) { | 
| 22 |  // TODO Auto-generated method stub | 
| 23 |   | 
| 24 |   t=newThread(){ | 
| 25 |   publicvoidrun() | 
| 26 |   { while(isrun) | 
| 27 |   { | 
| 28 |    longstart=System.currentTimeMillis(); | 
| 29 |       Canvas canvas=KetrisCanvas.this.holder.lockCanvas(null); | 
| 30 |     //这里完成游戏逻辑  | 
| 31 | 
| 32 |     paint();//这里是屏幕绘制 | 
| 33 |       canvas.drawBitmap(g.offs, 0, 0,null); | 
| 34 |       | 
| 35 |       KetrisCanvas.this.holder.unlockCanvasAndPost(canvas); | 
| 36 |       longend=System.currentTimeMillis(); | 
| 37 |       if(200>end-start) | 
| 38 |       { | 
| 39 |        try{Thread.sleep(200-(end-start));}catch(Exception e){} | 
| 40 |       } | 
| 41 |   } | 
| 42 |   } | 
| 43 |  }; | 
| 44 |  t.start(); | 
| 45 | } | 
| 46 | @Override | 
| 47 | publicvoidsurfaceDestroyed(SurfaceHolder holder) { | 
| 48 |  // TODO Auto-generated method stub | 
| 49 |  if(t!=null) | 
| 50 |  { isrun=false; | 
| 51 |  } | 
| 52 | } | 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号