android sensor之重力小球
安卓重力小球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之重力小球相关推荐
- Android实现重力小球
很简单的实现,作为软件专业大二在校生,接触安卓还没两个月,没事写着玩练练手,请大神们莫要嘲讽 重力小球主要参考了http://www.xuanyusong.com/archives/337这篇文章,我 ...
- 【自定义view】android重力小球
android实现重力小球 自定义小球view package com.project.demo.view;import static android.content.Context.SENSOR_S ...
- Android Sensor 传感器总结
ref:https://www.jianshu.com/p/8440a5897944 https://developer.android.google.cn/guide/topics/sensors/ ...
- Android Sensor 概览
Android Sensor 概览 本文基于android-10.0.0_r36 – 清华大学开源软件镜像站AOSP Android 传感器概览:sensors_overview 传感器堆栈:sens ...
- Android下的重力感应应用
android手机支持重力感应,针对Android的通过如下接口支持: android.hardware.SensorEventListener 该接口有两个方法需要实现: @Override pu ...
- Android Sensor Development
Android Sensor Development 本文我们说一下Android中的传感器,这对于我们有时候做一些特殊的应用的时候还是需要的,这里我用小米手机下载了一个安兔兔,我们来看下大致的传感器 ...
- pm1 android,Android Sensor SDK
Android Sensor SDK Step By Step 1.新建工程 Android Studio配置 将sensoro-sensor-kit.jar包放入道libs文件夹下,然后在当前工程下 ...
- Android Sensor Framework(狠详)
1. Overview Android Sensor Framework 的整体架构如图 1 所示: 图片 1 Android Sensor Framework 可以分为 3 大部分,各个部分的主要功 ...
- canvas重力小球 html+css+js
先看效果(完整代码在底部): 因为录屏软件的原因,动画看着有点迟钝,其实是动画很顺畅的~ https://space.bilibili.com/176586698 实现过程(可一步一步实现): 1.定 ...
最新文章
- 探臻实录 | 戴琼海:搭建脑科学与人工智能的桥梁
- 用ram实现寄存器堆_纯C语言实现bootloader
- 微软推出 Pylance,改善 VS Code 中的 Python 体验
- 面试必问之JVM原理
- pythonjson数据提取_python爬虫学习笔记(十)-数据提取之JsonPath的使用
- 三菱四节传送带控制梯形图_一文讲透FX5U PLC程序控制指令及步进梯形图编程
- Linux下top命令详解
- python第三方库引用_Python入门:如何使用第三方库
- 做游戏,学编程(C语言) 2 最简单的飞机游戏
- file-max与ulimit的设置,nginx 500错误的原因
- 语音识别技术是什么_语音识别技术应用领域介绍
- 鸿蒙来了!能否与安卓、iOS三足鼎立?
- Git基础入门(一)Git基础概念
- tableau的下载安装及简单使用
- 怎么计算机械需要的电机,步进电机力矩的怎么计算?
- 阿里语音识别看这一篇就够了
- 基于QT5、C/S(客户端/服务器)架构的MiniQQ项目开发
- HTML代码 可在线运行查看效果的HTML在线编辑器
- 解决Chrome中打不开Google搜索结果链接
- c语言编程期刊论文管理系统,C语言编程下计算机软件论文