您还未登录!| 登录 | 注册 | 帮助CSDN首页 资讯 论坛 博客 下载 搜索 更多
┢┦ī М ī
分类: 【 Android 游戏开发】
公告:CSDN下载频道即将全面改版
【Android游戏开发十八】解放手指,利用传感器开发游戏!(本文讲解
在SurfaceView中用重力传感器控制圆球的各方向移动)
2011-01-16 00:18 7513人阅读 评论(26) 收藏 举报
Himi 原原创创,, 欢欢迎迎转载转载,,转载请转载请在明在明显处显处注明!注明! 谢谢谢谢。。
原文地址:原文地址:http://blog.csdn.net/xiaominghimi/archive/2011/01/16/6143520.aspx
前两篇都是向大家介绍了很有意思的两种手势操作,嵌入我们游戏中,不得不说让游戏的自由度、可玩性和趣
味性都增色不少!那么今天继续给大家介绍一亮点!传传感器感器!
一:什么是一:什么是传传感器:感器:
所谓传感器能够探测如光、热、温度、重力、方向 等等的功能!
二:二:Android中提供中提供传传感器有哪些:感器有哪些:
1. 加速度传感器(重力传感器)
2. 陀螺仪传感器
3. 光传感器
5. 恒定磁场传感器
6. 方向传感器
7. 恒定的压力传感器
8. 接近传感器
9. 温度传感器
今天我们给大家介绍的是游戏开发中最最常见的,用到的频率最高的一种传感器,加速度加速度传传感器感器 (重力重力传传感器感器 )!
因因为为模模拟拟器无法器无法测试测试,所以我用手机,所以我用手机调试调试的的~,先上两先上两张张截截图图;;
原创:42篇 转载:0篇
译文:1篇 评论:1273条
展开
个人个人资资料料
xiaominghimi
访问:182731次
积分:3035分
排名:第1136名
文章搜索文章搜索
文章分文章分类类
【 Android 游戏开发】(28)
【 iOS-cocos2d(1.0.0)】(6)
【 iOS 游戏开发】(2)
【 J2ME 3D 游戏开发】(3)
【 Objective-C 语言随笔 】(3)
【—学习历程—】(1)
文章存档文章存档
2011年08月(5)
2011年07月(3)
2011年06月(6)
2011年05月(1)
2011年04月(1)
About Himi
【中国移动开发者社区— 技术
专家】
【微度网Android—游戏开发专区
版主】
【eoe·Android—游戏研究专区
版主】
CSDN 今日今日头头条条
CSDN移动博文集锦之Android游
戏开发
『 不要让任何事情成为你不去学习的理由!』
目录视图 摘要视图 订阅
converted by Web2PDFConvert.com
戏开发
51博客专题—游戏开发实例与技
巧
Find Himi
[QQ:317426208]
[围脖:t.qq.com/xiaominghimi]
[Mail
:xiaominghimi@gmail.com]
[微信帐号:xiaominghimi]
[Android 开发交流1/2/3/4高级群
]
阅读阅读排行排行
浅谈3年游戏开发de自学历程!(
仅供参考... (29555)
【Android游戏开发之一】设置全
屏以... (12366)
【Iphone 游戏开发】游戏引擎剖析
(12325)
【Android游戏开发十一】手把手
让你... (10432)
【Android游戏开发之四】Andro...
(9102)
【Android游戏开发二十】物理
游戏... (8864)
【Android游戏开发二十一】And...
(7976)
【Android游戏开发十四】深
入Ani... (7559)
【Android游戏开发之二】剖析游
戏开... (7523)
【Android游戏开发十八】解放
手指,... (7511)
评论评论排行排行
浅谈3年游戏开发de自学历程!(
仅供参考... (464)
【Android游戏开发之一】设置全
converted by Web2PDFConvert.com
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
01. /**
02. *@author Himi
03. *@Sensor 加速度传感器 ,也称为重力传感器
04. *@SDK 1.5(api 3)就支持传感器了
05. *@解释:此传感器不仅对玩家反转手机的动作可以检测到,而且会根据反转手机的程度,得到传感器的值也会不同!
06. */
07. public class MySurfaceView extends SurfaceView implements Callback, Runnable {
08. private Thread th = new Thread(this);
09. private SurfaceHolder sfh;
10. private Canvas canvas;
11. private Paint paint;
12. private SensorManager sm;
13. private Sensor sensor;
14. private SensorEventListener mySensorListener;
15. private int arc_x, arc_y;// 圆形的x,y位置
16. private float x = 0, y = 0, z = 0;
17. public MySurfaceView(Context context) {
18. super(context);
19. this.setKeepScreenOn(true);
20. sfh = this.getHolder();
21. sfh.addCallback(this);
22. paint = new Paint();
23. paint.setAntiAlias(true);
24. setFocusable(true);
25. setFocusableInTouchMode(true);
26. //通过服务得到传感器管理对象
27. sm = (SensorManager) MainActivity.ma.getSystemService(Service.SENSOR_SERVICE);
【Android游戏开发之一】设置全
屏以... (59)
【Android游戏开发之三】剖析
Su... (46)
【Android游戏开发之四】Andro...
(46)
【Android游戏开发二十】物理
游戏... (44)
【Android游戏开发十四】深
入Ani... (39)
【—公告—】 ▁▂▃▄▅▆▇█ 【And...
(39)
【Android游戏开发二十一】And...
(38)
【Android游戏开发十一】手把手
让你... (33)
【Android游戏开发十九】(必
看篇)... (33)
最新最新评论评论
我想问的是为什么我把您的代
码原...
谢谢哈咯
谢谢喽楼各个
xiexie
支持lz,继续关注中,想从事a...
@kwed23456:重复啦。...
@whuslei:帮助别人就是...
@kwed23456:其实爱好...
@mozei:感谢支持
@xiaominghimi:楼...
converted by Web2PDFConvert.com
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 = new SensorEventListener() {
39. @Override
40. //传感器获取值发生改变时在响应此函数
41. public void onSensorChanged(SensorEvent event) {//备注1
42. //传感器获取值发生改变,在此处理
43. x = event.values[0]; //手机横向翻滚
44. //x>0 说明当前手机左翻 x<0右翻
45. y = event.values[1]; //手机纵向翻滚
46. //y>0 说明当前手机下翻 y<0上翻
47. z = event.values[2]; //屏幕的朝向
48. //z>0 手机屏幕朝上 z<0 手机屏幕朝下
49. arc_x -= x;//备注2
50. arc_y += y;
51. }
52. @Override
53. //传感器的精度发生改变时响应此函数
54. public void onAccuracyChanged(Sensor sensor, int accuracy) {
55. // TODO Auto-generated method stub
56. }
57. };
58. sm.registerListener(mySensorListener, sensor, SensorManager.SENSOR_DELAY_GAME);
59. //第一个参数是传感器监听器,第二个是需要监听的传感实例
60. //最后一个参数是监听的传感器速率类型: 一共一下四种形式
61. //SENSOR_DELAY_NORMAL 正常
62. //SENSOR_DELAY_UI 适合界面
63. //SENSOR_DELAY_GAME 适合游戏 (我们必须选这个呀 哇哈哈~)
64. //SENSOR_DELAY_FASTEST 最快
65. }
66. public void surfaceCreated(SurfaceHolder holder) {
67. arc_x = this.getWidth() / 2 - 25;
68. arc_y = this.getHeight() / 2 - 25;
69. th.start();
70. }
71. public void 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, arc_x + 50,
78. arc_y + 50), 0, 360, true, paint);
79. paint.setColor(Color.YELLOW);
80. canvas.drawText("当前重力传感器的值:", arc_x - 50, arc_y-30, paint);
81. canvas.drawText("x=" + x + ",y=" + y + ",z=" + z,
82. arc_x - 50, arc_y, paint);
83. String temp_str = "Himi提示: ";
84. String temp_str2 = "";
85. String temp_str3 = "";
86. if (x < 1 && x > -1 && y < 1 && y > -1) {
87. temp_str += "当前手机处于水平放置的状态";
88. if (z > 0) {
89. temp_str2 += "并且屏幕朝上";
90. } else {
91. temp_str2 += "并且屏幕朝下,提示别躺着玩手机,对眼睛不好哟~";
92. }
93. } else {
94. if (x > 1) {
95. temp_str2 += "当前手机处于向左翻的状态";
96. } else if (x < -1) {
97. temp_str2 += "当前手机处于向右翻的状态";
98. }
99. if (y > 1) {
100. temp_str2 += "当前手机处于向下翻的状态";
101. } else if (y < -1) {
102. temp_str2 += "当前手机处于向上翻的状态";
converted by Web2PDFConvert.com
103. }
104. if (z > 0) {
105. temp_str3 += "并且屏幕朝上";
106. } else {
107. temp_str3 += "并且屏幕朝下,提示别躺着玩手机,对眼睛不好哟~";
108. }
109. }
110. paint.setTextSize(20);
111. canvas.drawText(temp_str, 0, 50, paint);
112. canvas.drawText(temp_str2, 0, 80, paint);
113. canvas.drawText(temp_str3, 0, 110, paint);
114. }
115. } catch (Exception e) {
116. Log.v("Himi", "draw is Error!");
117. } finally {
118. sfh.unlockCanvasAndPost(canvas);
119. }
120. }
121. @Override
122. public void run() {
123. // TODO Auto-generated method stub
124. while (true) {
125. draw();
126. try {
127. Thread.sleep(100);
128. } catch (Exception ex) {
129. }
130. }
131. }
132. public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
133. }
134. public void surfaceDestroyed(SurfaceHolder holder) {
135. }
136. }
备备注注1:
SensorEventListener的onSensorChanged事件将返回SensorEvent对象,包含Sensor的最新数据,通
过event.values获得一个float[]数组!对于不同的传感器类型,其数组包含的元素个数是不同的,重力传感器总是返
回一个长度为3的数组,分别代表X、Y和Z方向的数值。Z轴表示了手机是屏幕朝上还是屏幕朝下;
这这里里还还要注意你当前手机要注意你当前手机处处于于 纵纵向,向, 还还是横向,因是横向,因为这为这个会影响我个会影响我们们的的X,,Y表示的意思表示的意思 !
如果当前手机是如果当前手机是纵纵向屏幕向屏幕 :
x>0 说说明当前手机左翻明当前手机左翻 x<0右翻右翻
y>0 说说明当前手机下翻明当前手机下翻 y<0上翻上翻
如果当前手机是横向屏幕如果当前手机是横向屏幕 :
x>0 说说明当前手机下翻明当前手机下翻 x<0上翻上翻
y>0 说说明当前手机右翻明当前手机右翻 y<0左翻左翻
我要提醒各位童鞋我要提醒各位童鞋 :
1.要考虑玩家当前拿手机的姿势,例如竖屏,横屏
converted by Web2PDFConvert.com
分享到:分享到:
2.根据横竖屏幕的不同,虽然屏幕坐标系会自动改变,但是传感器的值不会自动改变坐标系!所以为什么会横
屏竖屏改变的时候我们从传感器中取出的值表示的动作不一样的原因!!!因此大家游戏开发的时候对于人物
移动、图片移动等等操作的时候,手势X,Y的正负值代表什么一定要想清楚!否则玩家会玩着玩着吐的 (太晕了!)-
-、
备备注注2 :
这里本应该arc_x+=x;但是因为当前我屏幕是纵向!造成x>0的手势表示玩家将手机左翻了,但是我们屏幕的圆形
应该根据人的反转相对应的移动,那么这里玩家将手机左翻,我们就应该让原型的X坐标减少!所以这里写成
了arc_x-=x;!
总结一下一下 : 对对于于传传感器的感器的虽虽然本章只是然本章只是讲讲了一个重力了一个重力传传感器,但是一个足感器,但是一个足够够了,因了,因为为如果你想使用其他的如果你想使用其他的传传
感器,那么你只要以下步感器,那么你只要以下步骤骤就就OK::
1. 利用利用 SensorManager.getDefaultSensor();传传入一个你想要的入一个你想要的传传感器的参数得到其感器的参数得到其实实例!例!
2.注册!注册!
3.在在监监听器里听器里处处理事件!理事件!
OK!就是!就是这这么么简单简单、、
源源码码下下载载地址:地址:http://download.csdn.net/source/2985714
上一篇:【Android游戏开发十七】让玩家自定义手势玩转Android游戏!—Android Gesture之【输入法
手势技术】
下一篇:【Android游戏开发十九】(必看篇)SurfaceView运行机制详解—剖析Back与Home按键及切入后台等异常处理!
查查看看评论评论
15楼 sunxiaoyi6 2011-06-23 15:45发表
看了很多篇楼主的博客,再不出来顶已下实在是过意不去了,多谢楼主的分享精神,拜读了以后,非常受用,
14楼 zk0301 2011-05-18 11:12发表
先留着 以后用到细看 下一篇 冲啊
13楼 s_ling2 2011-03-15 16:26发表
converted by Web2PDFConvert.com
虽然看不明白,但是顶你!
12楼 lei275437441 2011-02-20 13:00发表
Re: xiaominghimi 2011-02-23 18:06发表
回复 lei275437441:感谢支持
11楼 thischou 2011-02-19 12:53发表
Re: xiaominghimi 2011-02-23 18:06发表
回复 thischou:感谢支持
10楼 lei275437441 2011-02-18 18:12发表
Re: xiaominghimi 2011-02-23 18:06发表
回复 lei275437441:感谢支持
9楼 jakemanse 2011-02-17 11:05发表
感觉传感器开发的需求市还是很大的,或能促使第三方硬件产品的衍生...
Re: xiaominghimi 2011-02-23 18:06发表
回复 jakemanse:是的。
8楼 k2v1314 2011-01-23 22:01发表
目前做driver,对上层不太了解,学习中!
7楼 zmmkele 2011-01-20 11:20发表
感觉开发游戏挺有意思的。
Re: xiaominghimi 2011-01-21 09:32发表
回复 zmmkele:感谢支持、一直都很有意思 呵呵~
6楼 bingtao_bit 2011-01-19 21:55发表
相当给力,有想法,但愿以后会多些这方面的应用或者游戏之类的
Re: xiaominghimi 2011-01-20 00:37发表
回复 bingtao_bit:感谢支持
5楼 zhao860216 2011-01-19 10:16发表
Re: xiaominghimi 2011-01-20 00:38发表
回复 zhao860216:感谢支持
4楼 liaoshizhang 2011-01-18 23:50发表
非常给力!!!
Re: xiaominghimi 2011-01-20 00:37发表
回复 liaoshizhang:感谢支持
3楼 YOU_ARE_MY_FAVORITE 2011-01-17 22:11发表
converted by Web2PDFConvert.com
Re: xiaominghimi 2011-01-18 02:15发表
回复 YOU_ARE_MY_FAVORITE:感谢支持
2楼 jiaoshi0531 2011-01-17 12:17发表
支持一下
Re: xiaominghimi 2011-01-17 13:20发表
回复 jiaoshi0531:感谢支持
1楼 crw_en 2011-01-16 12:45发表
Re: xiaominghimi 2011-01-16 12:54发表
回复 crw_en:感谢支持
您还没有登录,请[登录]或[注册]
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
公司简介 | 招贤纳士 | 广告服务 | 银行汇款帐号 | 联系方式 | 版权声明 | 法律顾问 | 问题
北京创新乐知信息技术有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
江苏乐知网络技术有限公司 提供商务支持
Email:webmaster@csdn.net
Copyright © 1999-2011, CSDN.NET, All Rights Reserved
converted by Web2PDFConvert.com