怎样在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. IL代码

    浅析.NET IL代码   一.前言 IL是什么? Intermediate Language (IL)微软中间语言 C#代码编译过程? C#源代码通过LC转为IL代码,IL主要包含一些元数据和中间语 ...

  2. Java Web Services (0) - Overview

    前言第1章 Web服务快速入门 1.1 Web服务杂项 1.2 Web服务有什么好处 1.3 Web服务和面向服务的架构 1.4 Web服务简史 1.4.1 从DCE/RPC到XML-RPC 1.4. ...

  3. linux kernel的函数与抽象层

    在数学领域,函数是一种关系,这种关系使一个集合里的每一个元素对应到另一个(可能相同的)集合里的唯一元素. 在C语言中函数也有这种联系.自变量影响着因变量. 在linux内核驱动编程经常会有抽象层的概念 ...

  4. CountDownLatch和CyclicBarrier的区别(转)

    在网上看到很多人对于CountDownLatch和CyclicBarrier的区别简单理解为CountDownLatch是一次性的,而CyclicBarrier在调用reset之后还可以继续使用.那如 ...

  5. [Python] heapq简介

    [Python] heapq简介 « Lonely Coder [Python] heapq简介 judezhan 发布于 2012 年 8 月 8 日 暂无评论 发表评论 假设你需要维护一个列表,这 ...

  6. sort如何按指定的列排序·百家电脑学院

    sort如何按指定的列排序·百家电脑学院 sort如何按指定的(9php.com)列排序 0000            27189           41925425065f           ...

  7. 高逼格UI-ASD(Android Support Design)

    绪 今年的Google IO给我们android开发着带来了三样非常屌非常屌的library: ASD(Android Support Design) APL(Android Percent Layo ...

  8. 浅谈 PHP 变量可用字符

    原文:浅谈 PHP 变量可用字符 先来说说php变量的命名规则,百度下一抓一大把:(1) PHP的变量名区分大小写;(2) 变量名必须以美元符号$开始;(3) 变量名开头可以以下划线开始;(4) 变量 ...

  9. Android开源项目大全 - 工具类

    主要包括那些不错的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. 一.依赖注入DI 通过依赖注入减少Vie ...

  10. ReentrantLock可重入锁的使用场景(转)

    摘要 从使用场景的角度出发来介绍对ReentrantLock的使用,相对来说容易理解一些. 场景1:如果发现该操作已经在执行中则不再执行(有状态执行) a.用在定时任务时,如果任务执行时间可能超过下次 ...