Android游戏开发十八解放手指利用传感器开发游戏本文讲解在SurfaceView中用重力传感器控制圆球的Word下载.docx
- 文档编号:17247552
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:8
- 大小:52.29KB
Android游戏开发十八解放手指利用传感器开发游戏本文讲解在SurfaceView中用重力传感器控制圆球的Word下载.docx
《Android游戏开发十八解放手指利用传感器开发游戏本文讲解在SurfaceView中用重力传感器控制圆球的Word下载.docx》由会员分享,可在线阅读,更多相关《Android游戏开发十八解放手指利用传感器开发游戏本文讲解在SurfaceView中用重力传感器控制圆球的Word下载.docx(8页珍藏版)》请在冰豆网上搜索。
90·
100·
110·
120·
130·
140·
150
1./**
2.
*@author
Himi
3.
*@Sensor
加速度传感器
也称为重力传感器
4.
*@SDK
1.5(api
3)就支持传感器了
5.
*@解释:
此传感器不仅对玩家反转手机的动作可以检测到,而且会根据反转手机的程度,得到传感器的值也会不同!
6.
*/
7.public
class
MySurfaceView
extends
SurfaceView
implements
Callback,
Runnable
{
8.
private
Thread
th
=
new
Thread(this);
9.
SurfaceHolder
sfh;
10.
Canvas
canvas;
11.
Paint
paint;
12.
SensorManager
sm;
13.
Sensor
sensor;
14.
SensorEventListener
mySensorListener;
15.
int
arc_x,
arc_y;
//
圆形的x,y位置
16.
float
x
0,
y
z
0;
17.
public
MySurfaceView(Context
context)
18.
super(context);
19.
this.setKeepScreenOn(true);
20.
sfh
this.getHolder();
21.
sfh.addCallback(this);
22.
paint
Paint();
23.
paint.setAntiAlias(true);
24.
setFocusable(true);
25.
setFocusableInTouchMode(true);
26.
//通过服务得到传感器管理对象
27.
sm
(SensorManager)
MainActivity.ma.getSystemService(Service.SENSOR_SERVICE);
28.
sensor
sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
//得到一个重力传感器实例
29.
//TYPE_ACCELEROMETER
加速度传感器(重力传感器)类型。
30.
//TYPE_ALL
描述所有类型的传感器。
31.
//TYPE_GYROSCOPE
陀螺仪传感器类型
32.
//TYPE_LIGHT
光传感器类型
33.
//TYPE_MAGNETIC_FIELD
恒定磁场传感器类型。
34.
//TYPE_ORIENTATION
方向传感器类型。
35.
//TYPE_PRESSURE
描述一个恒定的压力传感器类型
36.
//TYPE_PROXIMITY
常量描述型接近传感器
37.
//TYPE_TEMPERATURE
温度传感器类型描述
38.
mySensorListener
SensorEventListener()
39.
@Override
40.
//传感器获取值发生改变时在响应此函数
41.
void
onSensorChanged(SensorEvent
event)
{//备注1
42.
//传感器获取值发生改变,在此处理
43.
event.values[0];
//手机横向翻滚
44.
//x>
0
说明当前手机左翻
x<
0右翻
45.
event.values[1];
//手机纵向翻滚
46.
//y>
说明当前手机下翻
y<
0上翻
47.
event.values[2];
//屏幕的朝向
48.
//z>
手机屏幕朝上
z<
手机屏幕朝下
49.
arc_x
-=
x;
//备注2
50.
arc_y
+=
y;
51.
}
52.
53.
//传感器的精度发生改变时响应此函数
54.
onAccuracyChanged(Sensor
sensor,
accuracy)
55.
TODO
Auto-generated
method
stub
56.
57.
};
58.
sm.registerListener(mySensorListener,
SensorManager.SENSOR_DELAY_GAME);
59.
//第一个参数是传感器监听器,第二个是需要监听的传感实例
60.
//最后一个参数是监听的传感器速率类型:
一共一下四种形式
61.
//SENSOR_DELAY_NORMAL
正常
62.
//SENSOR_DELAY_UI
适合界面
63.
//SENSOR_DELAY_GAME
适合游戏
(我们必须选这个呀
哇哈哈~)
64.
//SENSOR_DELAY_FASTEST
最快
65.
66.
surfaceCreated(SurfaceHolder
holder)
67.
this.getWidth()
/
2
-
25;
68.
this.getHeight()
69.
th.start();
70.
71.
draw()
72.
try
73.
canvas
sfh.lockCanvas();
74.
if
(canvas
!
null)
75.
canvas.drawColor(Color.BLACK);
76.
paint.setColor(Color.RED);
77.
canvas.drawArc(new
RectF(arc_x,
arc_y,
+
50,
78.
50),
360,
true,
paint);
79.
paint.setColor(Color.YELLOW);
80.
canvas.drawText("
当前重力传感器的值:
"
arc_y-30,
81.
x="
y="
z="
z,
82.
83.
String
temp_str
Himi提示:
;
84.
temp_str2
85.
temp_str3
86.
(x
<
1
&
>
-1
-1)
87.
当前手机处于水平放置的状态"
88.
(z
0)
89.
并且屏幕朝上"
90.
else
91.
并且屏幕朝下,提示别躺着玩手机,对眼睛不好哟~"
92.
93.
94.
1)
95.
当前手机处于向左翻的状态"
96.
97.
当前手机处于向右翻的状态"
98.
99.
(y
100.
当前手机处于向下翻的状态"
101.
102.
当前手机处于向上翻的状态"
103.
104.
105.
106.
107.
108.
109.
110.
paint.setTextSize(20);
111.
canvas.drawText(temp_str,
112.
canvas.drawText(temp_str2,
80,
113.
canvas.drawText(temp_str3,
110,
114.
115.
catch
(Exception
e)
116.
Log.v("
Himi"
draw
is
Error!
);
117.
finally
118.
sfh.unlockCanvasAndPost(canvas);
119.
120.
121.
122.
run()
123.
124.
while
(true)
125.
draw();
126.
127.
Thread.sleep(100);
128.
ex)
129.
130.
131.
132.
surfaceChanged(SurfaceHolder
holder,
format,
width,
height)
133.
134.
surfaceDestroyed(SurfaceHolder
135.
136.}
备注1:
SensorEventListener的onSensorChanged事件将返回SensorEvent对象,包含Sensor的最新数据,通过event.values获得一个float[]数组!
对于不同的传感器类型,其数组包含的元素个数是不同的,重力传感器总是返回一个长度为3的数组,分别代表X、Y和Z方向的数值。
Z轴表示了手机是屏幕朝上还是屏幕朝下;
这里还要注意你当前手机处于纵向,还是横向,因为这个会影响我们的X,Y表示的意思!
如果当前手机是纵向屏幕:
x>
0说明当前手机左翻x<
0右翻
y>
0说明当前手机下翻y<
如果当前手机是横向屏幕:
x>
0说明当前手机下翻x<
0上翻
y>
0说明当前手机右翻y<
0左翻
我要提醒各位童鞋:
1.要考虑玩家当前拿手机的姿势,例如竖屏,横屏
2.根据横竖屏幕的不同,虽然屏幕坐标系会自动改变,但是传感器的值不会自动改变坐标系!
所以为什么会横屏竖屏改变的时候我们从传感器中取出的值表示的动作不一样的原因!
!
因此大家游戏开发的时候对于人物移动、图片移动等等操作的时候,手势X,Y的正负值代表什么一定要想清楚!
否则玩家会玩着玩着吐的(太晕了!
)--、
备注2:
这里本应该arc_x+=x;
但是因为当前我屏幕是纵向!
造成x>
0的手势表示玩家将手机左翻了,但是我们屏幕的圆形应该根据人的反转相对应的移动,那么这里玩家将手机左翻,我们就应该让原型的X坐标减少!
所以这里写成了arc_x-=x;
总结一下:
对于传感器的虽然本章只是讲了一个重力传感器,但是一个足够了,因为如果你想使用其他的传感器,那么你只要以下步骤就OK:
1.利用
SensorManager.getDefaultSensor();
传入一个你想要的传感器的参数得到其实例!
2.注册!
3.在监听器里处理事件!
OK!
就是这么简单、
源码下载地址:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 游戏 开发 十八 解放 手指 利用 传感器 本文 讲解 SurfaceView 中用 重力 控制 圆球
链接地址:https://www.bdocx.com/doc/17247552.html