快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门24小时官网_龟发之家论坛



前两篇都是向大年夜家先容了很故意思的两种手势操作,嵌入我们游戏中,不得不说让游戏的自由度、可玩性和意见意义性都增色不少!那么本日继承给大年夜家先容一亮点!传感器!

一:什么是传感器:

所谓传感器能够探测如光、热、温度、重力、偏向 等等的功能!

二:Android中供给传感器有哪些:

1.加速率传感器(重力传感器)

2.陀螺仪传感器

3.光传感器

5.恒定磁场传感器

6.偏向传感器

7.恒定的压力传感器

8.靠近传感器

9.温度传感器

本日我们给大年夜家先容的是游戏开拓中最最常见的,用到的频率最高的一种传感器,加速率传感器(重力传感器)!

由于模拟器无法测试,以是我用手机调试的~,先上两张截图;

/**

*@author Himi*@Sensor 加速率传感器 ,也称为重力传感器

*@SDK 1.5(api 3)就支持传感器了*@解释:此传感器不仅对玩家反转手机的动作可以检测到,而且会根据反转手机的程度,获得传感器的值也会不合!

*/ public class MySurfaceView extends SurfaceView implements Callback, Runnable {

private Thread th = new Thread(this);private SurfaceHolder sfh;

private Canvas canvas;private Paint paint;

private SensorManager sm;private Sensor sensor;

private SensorEventListener mySensorListener;private int arc_x, arc_y;// 圆形的x,y位置

private float x = 0, y = 0, z = 0;public MySurfaceView(Context context) {

super(context);this.setKeepScreenOn(true);

sfh = this.getHolder();sfh.addCallback(this);

paint = new Paint();paint.setAntiAlias(true);

setFocusable(true);setFocusableIn澳门24小时官网TouchMode(true);

//经由过程办事获得传感器治理工具sm = (SensorManager) MainActivity.ma.getSystemService(Service.SENSOR_SERVICE);

sensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//获得一个重力传感器实例//TYPE_ACCELEROMETER加速率传感器(重力传感器)类型。

//TYPE_ALL描述所有类型的传感器。//TYPE_GYROSCOPE陀螺仪传感器类型

//TYPE_LIGHT光传感器类型//TYPE_MAGNETIC_FIELD恒定磁场传感器类型。

//TYPE_ORIENTATION偏向传感器类型。//TYPE_PRESSURE描述一个恒定的压力传感器类型

//TYPE_PROXIMITY常量描述型靠近传感器//TYPE_TEMPERATURE温度传感器类型描述

mySensorListener = new SensorEventListener() {@Override

//传感器获取值发生改变时在相应此函数public void onSensorChanged(SensorEvent event) {//备注1

//传感器获取值发生改变,在此处置惩罚x = event.values[0]; //手机横向翻腾

//x>0 阐明当前手机左翻 xy = event.values[1]; //手机纵向翻腾

//y>0 阐明当前手机下翻 yz = event.values[2]; //屏幕的朝向

//z>0 手机屏幕朝上 zarc_x -= x;//备注2

arc_y += y;}

@Override//传感器的精度发生改变时相应此函数

public void onAccuracyChanged(Sensor sensor, int accuracy) {// TODO Auto-generated method stub

}};

sm.registerListener(mySensorListener, sensor, SensorManager.SENSOR_DELAY_GAME);//第一个参数是传感器监听器,第二个是必要监听的传感实例

//着末一个参数是监听的传感器速度类型: 一共一下四种形式//SENSOR_DELAY_NORMAL正常

//SENSOR_DELAY_UI得当界面//SENSOR_DELAY_GAME得当游戏(我们必须选这个呀 哇哈哈~)

//SENSOR_DELAY_FAS澳门24小时官网TEST最快}

pub澳门24小时官网lic void surfaceCreated(SurfaceHolder holder) {arc_x = this.getWidth() / 2 - 25;

arc_y = this.getHeight() / 2 - 25;th.start();

}public void draw() {

try {canvas = sfh.lockCanvas();

if (canvas != null) {canvas.drawColor(Color.BLACK);

paint.setColor(Color.RED);canvas.drawArc(new RectF(arc_x, arc_y, arc_x + 50,

arc_y + 50), 0, 360, true, paint);paint.setColor(Color.YEL澳门24小时官网LOW);

canvas.drawText("当前重力传感器的值:", arc_x - 50, arc_y-30, paint);canvas.drawText("x=" + x + ",y=" + y + ",z=" + z,

arc_x - 50, arc_y, paint);String temp_str = "Himi提示: ";

String temp_str2 = "";String temp_str3 = "";

if (x 1 && x > -1 && y 1 && y > -1) {temp_str += "当前手机处于水平放置的状态";

if (z > 0) {temp_str2 += "并且屏幕朝上";

} else {temp_str2 += "并且屏幕朝下,提示别躺着玩手机,对眼睛不好哟~";

}} else {

if (x > 1) {temp_str2 += "当前手机处于向左翻的状态";

} else if (x 1) {temp_str2 += "当前手机处于向右翻的状态";

}if (y > 1) {

temp_str2 += "当前手机处于向下翻的状态";} else if (y 1) {

temp_str2 += "当前手机处于向上翻的状态";}

if (z > 0) {temp_str3 += "并且屏幕朝上";

} else {temp_str3 += "并且屏幕朝下,提示别躺着玩手机,对眼睛不好哟~";

}}

paint.setTextSize(20);canvas.drawText(temp_str, 0, 50, paint);

canvas.drawText(temp_str2, 0, 80, paint);canvas.drawText(temp_str3, 0, 110, paint);

}} catch (Exception e) {

Log.v("Himi", "draw is Error!");} finally {

sfh.unlockCanvasAndPost(canvas);}

}@Override

public void run() {// TODO Auto-generated method stub

while (true) {draw();

try {Thread.sleep(100);

} catch (Exception ex澳门24小时官网) {}

}}

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}

public void surfaceDestroyed(SurfaceHolder holder) {}

}

备注1:

SensorEventListener的onSensorChanged事故将返回SensorEvent工具,包孕Sensor的最新数据,经由过程event.values得到一个float[]数组!对付不合的传感器类型,其数组包孕的元素个数是不合的,重力传感器老是返回一个长度为3的数组,分手代表X、Y和Z偏向的数值。Z轴表示了手机是屏幕朝上照样屏幕朝下;

这里还要留意你当前手机处于 纵向, 照样横向,由于这个会影响我们的X,Y表示的意思!

假如当前手机是纵向屏幕:

x>0 阐明当前手机左翻 x0 阐明当前手机下翻 y0 阐明当前手机下翻 x0 阐明当前手机右翻 y这里本应该arc_x+=x;然则由于当前我屏幕是纵向!造成x>0的手势表示玩家将手机左翻了,然则我们屏幕的圆形应该根据人的反转相对应的移动,那么这里玩家将手机左翻,我们就应该让原型的X坐标削减!以是这里写成了arc_x-=x;!

总结一下: 对付传感器的虽然本章只是讲了一个重力传感器,然则一个足够了,由于假如你想应用其他的传感器,那么你只要以下步骤就OK:

1. 使用 SensorManager.getDefaultSensor();传入一个你想要的传感器的参数获得着实例!

2.注册!

3.在监听器里处置惩罚事故!

OK!便是这么简单、

源码下载地址:http://download.csdn.net/source/2985714

您可能还会对下面的文章感兴趣: