好库网 好库网首页 | 我的好库
安卓专栏

Android开发中FPS游戏实现的两种方式比较

发布者:android
发布日期:2011/2/17 8:23:43   更新日期:2011/2/17 8:38:19
阅读次数:11401
评分:4.80
介绍:FPS (First Personal Shooting)第一人称视角射击游戏顾名思义就是以玩家的主观视角来进行射击游戏。本文详细介绍了此类游戏实现的方式。
正文:

如何用Android平台开发FPS游戏,其实现过程有哪些方法,这些方法又有哪些不同的地方呢?首先让我们先了解下什么是FPS

英文名:FPS (First Personal Shooting)

  第一人称视角射击游戏顾名思义就是以玩家的主观视角来进行射击游戏。玩家们不再像别的游戏一样操纵屏幕中的虚拟人物来进行游戏,而是身临其境的体验游戏带来的视觉冲击,这就大大增强了游戏的主动性和真实感。早期第一人称类游戏所带给玩家的一般都是的屏幕光线的刺激,简单快捷的游戏节奏。随着游戏硬件的逐步完善,以及各种类游戏的不断结合。第一人称射击类游戏提供了更加丰富的剧情以及精美的画面和生动的音效。例如我们玩的CS、Quake系列、UT系列、荣誉勋章、使命召唤、DOOM、彩虹6号、杀手47系列、穿越火线、反恐精英Online等等游戏。

方式1.

  private boolean drawall=false;
 private RefreshHandler mRedrawHandler = new RefreshHandler();
    class RefreshHandler extends Handler {

        @Override
        public void handleMessage(Message msg) {
         KetrisCanvas.this.update();
         KetrisCanvas.this.invalidate();
        }

        public void sleep(long delayMillis) {
         this.removeMessages(0);
            sendMessageDelayed(obtainMessage(0), delayMillis);
        }
    };
    long mLastMove=0;
    long mMoveDelay=30;
    public void update() {
            long now = System.currentTimeMillis();

            if (now - mLastMove > mMoveDelay) {
                //gameLogic(); 这里是游戏逻辑
             
                mLastMove = now;
            }
            mRedrawHandler.sleep(mMoveDelay);
        
    }
public void onDraw(Canvas canvas)
{super.onDraw(canvas);
 this.paint(); //这里是绘制到缓冲屏幕
 canvas.drawBitmap(g.offs, 0, 0, g.p);
}

在适当位置执行update();

方式2.

public class KetrisCanvas extends SurfaceView implements SurfaceHolder.Callback

{  

在构造方法完成   下面2句
     holder = this.getHolder();//获取holder
     holder.addCallback(this);


@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
  int height) {
 // TODO Auto-generated method stub
 
}

Thread t;
boolean isrun=true;
final SurfaceHolder holder;
@Override
public void surfaceCreated(SurfaceHolder holder) {
 // TODO Auto-generated method stub
 
  t=new Thread(){
  public void run()
  { while(isrun)
  {
   long start=System.currentTimeMillis();
      Canvas canvas=KetrisCanvas.this.holder.lockCanvas(null);
    //这里完成游戏逻辑  

    paint();//这里是屏幕绘制
      canvas.drawBitmap(g.offs, 0, 0,null );
      
      KetrisCanvas.this.holder.unlockCanvasAndPost(canvas);
      long end=System.currentTimeMillis();
      if(200>end-start)
      {
       try{Thread.sleep(200-(end-start));}catch(Exception e){}
      }
  }
  }
 };
 t.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
 // TODO Auto-generated method stub
 if(t!=null)
 { isrun=false;
 }
}

转载自:http://blog.csdn.net/sdhjob/archive/2009/12/22/5054455.aspx


评论 [发表评论]
账号 密码 还没帐号呢,现在注册一个?

免责声明:好库网所展示的信息由买卖双方自行提供,其真实性、准确性和合法性由信息发布人负责。好库网不提供任何保证,并不承担任何法律责任。