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

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

英文名:FPS (First Personal Shooting)

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

01 private boolean drawall=false;
02  private RefreshHandler mRedrawHandler = new RefreshHandler();
03     class RefreshHandler extends Handler {
04  
05         @Override
06         public void handleMessage(Message msg) {
07          KetrisCanvas.this.update();
08          KetrisCanvas.this.invalidate();
09         }
10  
11         public void sleep(long delayMillis) {
12          this.removeMessages(0);
13             sendMessageDelayed(obtainMessage(0), delayMillis);
14         }
15     };
16     long mLastMove=0;
17     long mMoveDelay=30;
18     public void update() {
19             long now = System.currentTimeMillis();
20  
21             if (now - mLastMove > mMoveDelay) {
22                 //gameLogic(); 这里是游戏逻辑
23               
24                 mLastMove = now;
25             }
26             mRedrawHandler.sleep(mMoveDelay);
27         
28     }
29 public void onDraw(Canvas canvas)
30 {super.onDraw(canvas);
31  this.paint(); //这里是绘制到缓冲屏幕
32  canvas.drawBitmap(g.offs, 00, g.p);
33 }

2. [代码][Java]代码     跳至 [1] [2] [全屏预览]

01 public class KetrisCanvas extends SurfaceView implements SurfaceHolder.Callback
02  
03
04  
05 在构造方法完成   下面2
06      holder = this.getHolder();//获取holder
07      holder.addCallback(this);
08  
09  
10 @Override
11 public void surfaceChanged(SurfaceHolder holder, int format, int width,
12   int height) {
13  // TODO Auto-generated method stub
14   
15 }
16  
17 Thread t;
18 boolean isrun=true;
19 final SurfaceHolder holder;
20 @Override
21 public void surfaceCreated(SurfaceHolder holder) {
22  // TODO Auto-generated method stub
23   
24   t=new Thread(){
25   public void run()
26   while(isrun)
27   {
28    long start=System.currentTimeMillis();
29       Canvas canvas=KetrisCanvas.this.holder.lockCanvas(null);
30     //这里完成游戏逻辑 
31  
32     paint();//这里是屏幕绘制
33       canvas.drawBitmap(g.offs, 00,null );
34       
35       KetrisCanvas.this.holder.unlockCanvasAndPost(canvas);
36       long end=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 public void surfaceDestroyed(SurfaceHolder holder) {
48  // TODO Auto-generated method stub
49  if(t!=null)
50  { isrun=false;
51  }
52 }

怎样在Android开发中FPS游戏实现的两种方式比较的更多相关文章

  1. [Android] Android ViewPager 中加载 Fragment的两种方式 方式(二)

    接上文: https://www.cnblogs.com/wukong1688/p/10693338.html Android ViewPager 中加载 Fragmenet的两种方式 方式(一) 二 ...

  2. [Android] Android ViewPager 中加载 Fragment的两种方式 方式(一)

    Android ViewPager 中加载 Fragmenet的两种方式 一.当fragment里面的内容较少时,直接 使用fragment xml布局文件填充 文件总数 布局文件:view_one. ...

  3. .Net 中读写Oracle数据库常用两种方式

    .net中连接Oracle 的两种方式:OracleClient,OleDb转载 2015年04月24日 00:00:24 10820.Net 中读写Oracle数据库常用两种方式:OracleCli ...

  4. strus2中获取表单数据 两种方式 属性驱动 和模型驱动

    strus2中获取表单数据 两种方式 属性驱动 和模型驱动 属性驱动 /** * 当前请求的action在栈顶,ss是栈顶的元素,所以可以利用setValue方法赋值 * 如果一个属性在对象栈,在页面 ...

  5. HTML中设置背景图的两种方式

    HTML中设置背景图的两种方式 1.background    background:url(images/search.png) no-repeat top; 2.background-image ...

  6. 通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制

    通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制 前言说明 本篇为网易云课堂Linux内核分析课程的第四周作业,我将通过调用C语言的库函数与在C代码中 ...

  7. Eclipse中构建maven项目的两种方式

    Eclipse中构建maven项目的两种方式 方式一: 1.构建maven项目 1.1 新建meven项目,可在Other中找到maven文件夹 1.2 进入maven项目后,点击next 1.3 在 ...

  8. Android开发中常用的ListView列表的优化方式ViewHolder

    在Android开发中难免会遇到大量的数据加载到ListView中进行显示, 然后其中最重要的数据传递桥梁Adapter适配器是常用的,随着市场的需 求变化ListView'条目中的内容是越来越多这就 ...

  9. 在springboot中使用Mybatis Generator的两种方式

    介绍 Mybatis Generator(MBG)是Mybatis的一个代码生成工具.MBG解决了对数据库操作有最大影响的一些CRUD操作,很大程度上提升开发效率.如果需要联合查询仍然需要手写sql. ...

随机推荐

  1. 加速 lucene 的搜索速度 ImproveSearchingSpeed

    * Be sure you really need to speed things up. Many of the ideas here are simple to try, but others w ...

  2. boost库在工作(33)网络服务端之三

    在这个例子里,表示服务器与一个客户端的沟通渠道,就是一个连接,封装为类CConnect.它是当服务器接收到一个客户端连接请求之后创建的,主要用来就是管理这个连接的生命周期,以及数据的接收和发送.从生命 ...

  3. codeforces 598B Queries on a String

    题目链接:http://codeforces.com/problemset/problem/598/B 题目分类:字符串 题意:给定一个串,然后n次旋转,每次给l,r,k,表示区间l到r的字符进行k次 ...

  4. POJ 2778 AC自己主动机+矩阵幂 不错的题

    http://poj.org/problem?id=2778 有空再又一次做下,对状态图的理解非常重要 题解: http://blog.csdn.net/morgan_xww/article/deta ...

  5. java中super()和this()浅析

    <span style="font-size:18px;">本质:这两个都是调用构造方法的方法.</span> 在java中,super()是在当前类的构造 ...

  6. Android中&lt;meta-data&gt;的使用

    在AndroidManifest.xml中.<meta-data>元素能够作为子元素,被包括在<activity>.<application> .<servi ...

  7. Oracle GoldenGate for Oracle 11g to PostgreSQL 9.2.4 Configuration

    Installing and setting up Oracle GoldenGate connecting to an Oracle database Also please make sure t ...

  8. fs学习笔记之输出格式

    接触fs那么久,有必要再记录一下. 上一篇介绍了fs拓扑描写叙述文件dot的格式,今天要介绍fs输出文件的格式. 举个样例,下面是d节点输出文件的一行记录,也就是一条流经过d的记录. textexpo ...

  9. 使用yiic安装开发web应用和解决yiic不是内部命令

    使用yii创建应用程序,推荐博客:http://www.cnblogs.com/waitingbar/archive/2013/02/28/2937308.html 把php.exe加入为系统环境变量 ...

  10. 【从翻译mos文章】正在实施的获取job的 session id

    正在实施的获取job的 session id 参考原始: How to get the session Id of the Running Job (Doc ID 1604966.1) 申请: Ora ...