为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

(十八)解放手指,利用传感器开发游戏!本文讲解在SurfaceView中用重力传感器控制圆球的各方向移动

2011-11-13 8页 pdf 409KB 21阅读

用户头像

is_506237

暂无简介

举报
(十八)解放手指,利用传感器开发游戏!本文讲解在SurfaceView中用重力传感器控制圆球的各方向移动 您还未登录!| 登录 | 注册 | 帮助CSDN首页 资讯 论坛 博客 下载 搜索 更多 ┢┦ī М ī 分类: 【 Android 游戏开发】 公告:CSDN下载频道即将全面改版 【Android游戏开发十八】解放手指,利用传感器开发游戏!(本文讲解 在SurfaceView中用重力传感器控制圆球的各方向移动) 2011-01-16 00:18 7513人阅读 评论(26) 收藏 举报 Himi 原原创创,, 欢欢迎迎转载转载,,转载请转载请在明在明显处显处注明!注明! 谢谢谢谢。。...
(十八)解放手指,利用传感器开发游戏!本文讲解在SurfaceView中用重力传感器控制圆球的各方向移动
您还未登录!| 登录 | 注册 | 帮助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
/
本文档为【(十八)解放手指,利用传感器开发游戏!本文讲解在SurfaceView中用重力传感器控制圆球的各方向移动】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索