怎样在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. Web API设计

    Web API设计经验与总结 在移动互联网的时代, Web服务已经成为了异构系统之间的互联与集成的主要手段,各种 Web服务几乎都采用REST风格的Web Api来构建. 通过Http协议的形式来. ...

  2. 如何配置Git支持大小写敏感和修改文件名中大小写字母呢?(转)

    1. 在新建代码文件时,不注意把文件名应该小小写搞错了2. 文件已经push到远程了3. 在windows下面将文件名字改为全小写 改好后,在Git中没有任何反应,使用git status时,如果遇到 ...

  3. 请慎用java的File#renameTo(File)方法(转)

    以前我一直以为File#renameTo(File)方法与OS下面的 move/mv 命令是相同的,可以达到改名.移动文件的目的.不过后来经常发现问题:File#renameTo(File)方法会返回 ...

  4. 在WIN7系统的笔记本上建立WIFI热点

        成功与否的关键在于你是否依照顺序运行:       前置条件:右键"我的电脑"--"属性"--"设备管理器"--"网络适配 ...

  5. 使用Java7提供Fork/Join框架

    在Java7在.JDK它提供了多线程开发提供了一个非常强大的框架.这是Fork/Join框架.这是原来的Executors更多 进一步,在原来的基础上添加了并行分治计算中的一种Work-stealin ...

  6. 【MongoDB】The description of index(一)

    From this blog, we start to talk about the index in mongo Database, which is similar to the traditio ...

  7. WPF案例 (四) 模拟Windows7桌面任务栏

    原文:WPF案例 (四) 模拟Windows7桌面任务栏 这个程序模彷了Windows7的桌面任务栏,当在桌面上双击某个快捷方式时,将打开一个新的子界面,并且在任务栏里创建一个链接到此界面的任务栏图标 ...

  8. hdu2151(递推dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2151 分析: DP.思路:全盘扫描.     i表示时间,l表示第几棵树,方程:     step[i ...

  9. vs2008+opencv2.4.9 +win7X64位系统 2.

    小编用自身血淋淋的例子,来给大家做个参考,共耗时近2天时间,终于屈服于安装vs2010,然后配置成功了.但是在这个配置成功后,我终于发现了我08配置不成功的原因,写下心得,供各位参考 1.准备工具 v ...

  10. Cocos2d-x Tiled地图编辑器(一)基本使用

    Tiled地图编辑器支持普通视角地图和45度角地图, 它生成的地图数据文件cocos2d-x完美的支持,Tiled地图编辑器是一个以普通使用为目标地图编辑器,它使用简单而且能够轻松地在不同的游戏引擎中 ...