安卓重力小球demo

要过年了,最近在公司也没事。于是就在研究android的一些SDK。看到sensor时,突然想到大学里面刚出现android的时候,还没有钱买android手机,那时候想要是有个android手机能测试什么的岂不是很牛逼啊。记得那时候同学有款重力小球的游戏。

今天就开发了一款简单的demo重力小球。在网上也借鉴了一些别人的代码。测试是用的我爸以前的联想200元安卓机,但运行起来还是比较流畅的,所以就把帧数定在30帧。

运行画面

之后增加个碰撞时速度的检测,有没有发现游戏也就这样不难的

开始正题

首先在activity中定义我的MyView显示:

 @Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 全屏显示窗口requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);//强制横屏setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 显示自定义的游戏ViewmAnimView = new MyView(this);setContentView(mAnimView);}

然后定义Myview:

 public class MyView extends SurfaceView implements Callback,Runnable ,SensorEventListener{/**TIME_IN_FRAME帧刷新一次屏幕*/  public static final int TIME_IN_FRAME = 30;/** 游戏画笔 **/Paint mPaint = null;Paint mTextPaint = null;SurfaceHolder mSurfaceHolder = null;/** 控制游戏更新循环 **/boolean mRunning = false;/** 游戏画布 **/Canvas mCanvas = null;/**控制游戏循环**/boolean mIsRunning = false;/**SensorManager管理*/private SensorManager mSensorMgr = null;    Sensor mSensor = null;    /**手机屏幕宽高**/int mScreenWidth = 0;int mScreenHeight = 0;/**小球资源文件越界区域**/private int mScreenBallWidth = 0;private int mScreenBallHeight = 0;/**游戏背景文件**/private Bitmap mbitmapBg;/**小球资源文件**/private Bitmap mbitmapBall;/**重力感应X,Y轴的重力*/private float mGX = 0;private float mGY = 0;public MyView(Context context) {super(context);/** 设置当前View拥有控制焦点 **/this.setFocusable(true);/** 设置当前View拥有触摸事件 **/this.setFocusableInTouchMode(true);/** 拿到SurfaceHolder对象 **/mSurfaceHolder = this.getHolder();/** 将mSurfaceHolder添加到Callback回调函数**/mSurfaceHolder.addCallback(this);/** 创建画布 **/mCanvas = new Canvas();/** 创建曲线画笔 **/mPaint = new Paint();mPaint.setColor(Color.WHITE);/**加载小球资源**/mbitmapBall = BitmapFactory.decodeResource(this.getResources(), R.drawable.ball);/**加载游戏背景**/mbitmapBg = BitmapFactory.decodeResource(this.getResources(), R.drawable.bg);/**获得震动服务**/vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);   /**得到SensorManager对象**/// 注册listener,第三个参数是检测的精确//SENSOR_DELAY_FASTEST 太快了没必要使用//SENSOR_DELAY_GAME    游戏中使用         //SENSOR_DELAY_NORMAL  正常速度//SENSOR_DELAY_UI        延迟mSensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);   mSensor = mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);   mSensorMgr.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_GAME);  }

最重要的是监听sensor事件:

   @Overridepublic void onSensorChanged(SensorEvent event) {mGX = Kg*event.values[SensorManager.DATA_Y];mGY= Kg*event.values[SensorManager.DATA_X];}

以及onDraw方法:

private void Draw() {/**绘制游戏背景**/mCanvas.drawBitmap(mbitmapBg,0,0, mPaint);/**获取速度方向**/Dx=getOrientation(Vx);Dy=getOrientation(Vy);/**获取合加速度 **/float Ax=(float) (mGX-Dx*Kf*Math.pow(Vx, 2));float Ay=(float) (mGY-Dy*Kf*Math.pow(Vy, 2));/**获取速度**/Vx=(float) (Vx+Ax*0.02);Vy=(float) (Vy+Ay*0.02);/**获取位移**/Sx=(float) (Sx+Vx);Sy=(float) (Sy+Vy);//判断小球是否超出边界if (Sx < 0) {Sx = 0;Vx=impactSpeed(Vx);} else if (Sx > mScreenBallWidth) {Sx = mScreenBallWidth;Vx=impactSpeed(Vx);}if (Sy < 0) {Sy= 0;Vy=impactSpeed(Vy);} else if (Sy > mScreenBallHeight) {Sy = mScreenBallHeight;Vy=impactSpeed(Vy);}/**绘制小球**/mCanvas.drawBitmap(mbitmapBall, Sx,Sy, mPaint);mCanvas.drawText("Gx "+ mGX, 0, 20, mPaint);mCanvas.drawText("Gy "+ mGY, 0, 40, mPaint);mCanvas.drawText("Vx " + Vx, 100, 20, mPaint);mCanvas.drawText("Vy " + Vy, 100, 40, mPaint);mCanvas.drawText("Sx " + Sx, 200, 20, mPaint);mCanvas.drawText("Sy " + Sy, 200, 40, mPaint);}

最后附上我的代码:下载地址

android sensor之重力小球相关推荐

  1. Android实现重力小球

    很简单的实现,作为软件专业大二在校生,接触安卓还没两个月,没事写着玩练练手,请大神们莫要嘲讽 重力小球主要参考了http://www.xuanyusong.com/archives/337这篇文章,我 ...

  2. 【自定义view】android重力小球

    android实现重力小球 自定义小球view package com.project.demo.view;import static android.content.Context.SENSOR_S ...

  3. Android Sensor 传感器总结

    ref:https://www.jianshu.com/p/8440a5897944 https://developer.android.google.cn/guide/topics/sensors/ ...

  4. Android Sensor 概览

    Android Sensor 概览 本文基于android-10.0.0_r36 – 清华大学开源软件镜像站AOSP Android 传感器概览:sensors_overview 传感器堆栈:sens ...

  5. Android下的重力感应应用

    android手机支持重力感应,针对Android的通过如下接口支持: android.hardware.SensorEventListener 该接口有两个方法需要实现: @Override  pu ...

  6. Android Sensor Development

    Android Sensor Development 本文我们说一下Android中的传感器,这对于我们有时候做一些特殊的应用的时候还是需要的,这里我用小米手机下载了一个安兔兔,我们来看下大致的传感器 ...

  7. pm1 android,Android Sensor SDK

    Android Sensor SDK Step By Step 1.新建工程 Android Studio配置 将sensoro-sensor-kit.jar包放入道libs文件夹下,然后在当前工程下 ...

  8. Android Sensor Framework(狠详)

    1. Overview Android Sensor Framework 的整体架构如图 1 所示: 图片 1 Android Sensor Framework 可以分为 3 大部分,各个部分的主要功 ...

  9. canvas重力小球 html+css+js

    先看效果(完整代码在底部): 因为录屏软件的原因,动画看着有点迟钝,其实是动画很顺畅的~ https://space.bilibili.com/176586698 实现过程(可一步一步实现): 1.定 ...

最新文章

  1. 探臻实录 | 戴琼海:搭建脑科学与人工智能的桥梁
  2. 用ram实现寄存器堆_纯C语言实现bootloader
  3. 微软推出 Pylance,改善 VS Code 中的 Python 体验
  4. 面试必问之JVM原理
  5. pythonjson数据提取_python爬虫学习笔记(十)-数据提取之JsonPath的使用
  6. 三菱四节传送带控制梯形图_一文讲透FX5U PLC程序控制指令及步进梯形图编程
  7. Linux下top命令详解
  8. python第三方库引用_Python入门:如何使用第三方库
  9. 做游戏,学编程(C语言) 2 最简单的飞机游戏
  10. file-max与ulimit的设置,nginx 500错误的原因
  11. 语音识别技术是什么_语音识别技术应用领域介绍
  12. 鸿蒙来了!能否与安卓、iOS三足鼎立?
  13. Git基础入门(一)Git基础概念
  14. tableau的下载安装及简单使用
  15. 怎么计算机械需要的电机,步进电机力矩的怎么计算?
  16. 阿里语音识别看这一篇就够了
  17. 基于QT5、C/S(客户端/服务器)架构的MiniQQ项目开发
  18. HTML代码 可在线运行查看效果的HTML在线编辑器
  19. 解决Chrome中打不开Google搜索结果链接
  20. c语言编程期刊论文管理系统,C语言编程下计算机软件论文

热门文章

  1. 根据实测高程值校正DSM高程
  2. 小型电子商务网站设计原则
  3. vertical-align属性的用法
  4. 15 THINGS ALL GIRLS SHOULD KNOW ABOUT THEIR VAGINA
  5. 6-7 判断满足条件的三位数 (15 分)
  6. html+css简单立体导航栏
  7. javaweb从底层出发
  8. 新能源汽车充电桩检测标准介绍
  9. 解决: 码云错误 You have successfully authenticated, but Gitee.com does not provide she access
  10. 中国古代天文星象学的入门书 步天歌