游戏的手机重力感应器器跟屏幕旋转有关吗

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
既然选择了远方,便只顾风雨兼程...
LOFTER精选
阅读(7281)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'4.Android-传感器开发-方向判断',
blogAbstract:'
自从苹果公司在2007年发布第一代iPhone以来,以前看似和手机挨不着边的传感器也逐渐成为手机硬件的重要组成部分。如果读者使用过iPhone、HTC Dream、HTC Magic、HTC Hero以及其他的Android手机,会发现通过将手机横向或纵向放置,屏幕会随着手机位置的不同而改变方向。这种功能就需要通过重力传感器来实现,除了重力传感器,还有很多其他类型的传感器被应用到手机中,例如磁阻传感器就是最重要的一种传感器。虽然手机可以通过GPS来判断方向,但在GPS信号不好或根本没有GPS信号的情况下,GPS就形同虚设。这时通过磁阻传感器就可以很容易判断方向(东、南、西、北)。有了磁阻传感器,也使罗盘(俗称指向针)的电子化成为可能。
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:3,
publishTime:2,
permalink:'blog/static/',
commentCount:1,
mainCommentCount:1,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'既然选择了远方,便只顾风雨兼程...',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}三轴陀螺仪 电子罗盘 重力传感器 光线感应器_脚下路_天涯博客
转帖有意义的文字
今日访问:
总访问量:
开博时间:
博客排名:第12309位
(361)(62)(10)(10)(53)(37)(18)(19)(59)(9)(24)(9)(7)(11)(4)(1)(5)(1)(0)
(1)(1)(1)(1)(6)(1)(10)(12)(11)(9)(7)(11)(20)(14)(25)(28)(26)(50)(26)(26)(10)(6)(10)(25)(1)(1)(3)(1)(2)(3)(4)(3)(3)
  三轴陀螺仪    陀螺仪(Gyroscope),是一种用来传感与维持方向的装置,基于角动量守恒的理论设计出来的。陀螺仪主要是由一个位于轴心且可旋转的轮子构成。 陀螺仪一旦开始旋转,由于轮子的角动量,陀螺仪有抗拒方向改变的趋向。    陀螺仪有单轴陀螺仪和三轴陀螺仪,单轴的只能测量一个方向的量,也就是一个系统需要三个陀螺仪。而三轴陀螺仪可同时测定6个方向的位置,移动轨 迹,加速。所以一个三轴陀螺仪就能替代三个单轴陀螺仪。三轴陀螺仪多用于航海、航天等导航、定位系统,能够精确地确定运动物体的方位。如今也多用于智能手 机当中,比如最早采用该技的苹果iPhone 4。    三轴陀螺仪工作原理图    其实iPhone 4采用的“三轴陀螺仪”,也叫微机械陀螺仪也可称作MEMS陀螺仪。芯片内部含有一块微型磁性体,可以在手机进行旋转运动时产生的科里奥力作用下向 X,Y,Z三个方向发生位移,利用这个原理便可以测出手机的运动方向。而芯片核心中的另外一部分则可以讲有关的传感器数据转换为iPhone 4可以识别的数字格式,所以,当该系统运行时,无论你将iPhone 4上移或者甩动,里面的芯片接受指令就会向iPhone 4的CPU传输数据,使得iPhone 4能够做出正确的回应。    利用三轴陀螺仪进行体感控制的游戏    目前手机中采用的三轴陀螺仪用途主要体现在游戏的操控上,有了三轴陀螺仪,我们在玩现代战争等第一人称射击游戏以及狂野飙车等竞技类游戏时,可 以完全摒弃以前通过方向按键来控制游戏的操控方式,我们只需要通过移动手机相应的位置,既可以达到改变方向的目的,使游戏体验更加真实、操作更加灵活。      电子罗盘      电子罗盘,又称数字罗盘,在现代技术条件中电子罗盘作为导航仪器或姿态传感器已被广泛应用。电子罗盘与传统指针式和平衡架结构罗盘相比能耗低、 体积小、重量轻、精度高、可微型化,其输出信号通过处理可以实现数码显示,不仅可以用来指向,其数字信号可直接送到自动舵,控制船舶的操纵。目前,广为使 用的是三轴捷联磁阻式数字磁罗盘,这种罗盘具有抗摇动和抗振性、航向精度较高、对干扰场有电子补偿、可以集成到控制回路中进行数据链接等优点,因而广泛应 用于航空、航天、机器人、航海、车辆自主导航等领域。目前在手机中的应用也比较广泛。    电子罗盘可以分为平面电子罗盘和三维电子罗盘。平面电子罗盘要求用户在使用时必须保持罗盘的水平,否则当罗盘发生倾斜时,也会给出航向的变化而 实际上航向并没有变化。虽然平面电子罗盘对使用时要求很高,但如果能保证罗盘所附载体始终水平的话,平面罗盘是一种性价比很好的选择。三维电子罗盘克服了 平面电子罗盘在使用中的严格限制,因为三维电子罗盘在其内部加入了倾角传感器,如果罗盘发生倾斜时可以对罗盘进行倾斜补偿,这样即使罗盘发生倾斜,航向数据依然准确无误。有时为了克服温度漂移,罗盘也可内置温度补偿,最大限度减少倾斜角和指向角的温度漂移。          三维电子罗盘由三维磁阻传感器、双轴倾角传感器和MCU构成。三维磁阻传感器用来测量地球磁场,倾角传感器是在磁力仪非水平状态时进行补 偿;MCU处理磁力仪和倾角传感器的信号以及数据输出和软铁、硬铁补偿。该磁力仪是采用三个互相垂直的磁阻传感器,每个轴向上的传感器检测在该方向上的地 磁场强度。向前的方向称为x方向的传感器检测地磁场在x方向的矢量值;向左或Y方向的传感器检测地磁场在Y方向的矢量值;向下或Z方向的传感器检测地磁场 在Z方向的矢量值。每个方向的传感器的灵敏度都已根据在该方向上地磁场的分矢量调整到最佳点,并具有非常低的横轴灵敏度。传感器产生的模拟输出信号进行放 大后送入MCU进行处理。磁场测量范围为±2Gauss。通过采用12位A/D转换器,磁力仪能够分辨出小于1mGauss的磁场变化量,我们便可通过该 高分辨力来准确测量出200-300mGauss的X和Y方向的磁场强度,不论是在赤道上的向上变化还是在南北极的更低值位置。    重力传感器      重力传感器,新型属传感器技术,它采用弹性敏感元件制成悬臂式位移器,与采用弹性敏感元件制成的储能弹簧来驱动电触点,完成从重力变化到电信号 的转换。目前绝大多数中高端智能手机和平板电脑内置了重力传感器,如苹果的系列产品iphone和iPad,Android系列的手机等。重力传感器在手 机横竖的时候屏幕会自动转,在玩游戏可以代替上下左右,比如说玩赛车游戏,可以不通过按键,将手机平放,左右摇摆就可以代替模拟机游戏的方向左右移动了。        手机中应用重力传感器       重力传感器是根据压电效应的原理来工作的。所谓的压电效应就是 “对于不存在对称中心的异极晶体加在晶体上的外力除了使晶体发生形变以外,还将改变晶体的极化状态,在晶体内部建立电场,这种由于机械力作用使介质发生极化的现象称为正压电效应”。      重力传感器就是利用了其内部的由于加速度造成的晶体变形这个特性。由于这个变形会产生电压,只要计算出产生电压和所施加的加速度之间的关系,就 可以将加速度转化成电压输出。当然,还有很多其它方法来制作加速度传感器,比如电容效应,热气泡效应,光效应,但是其最基本的原理都是由于加速度产生某个 介质产生变形,通过测量其变形量并用相关电路转化成电压输出。        手机重力感应指的是手机内置重力摇杆芯片,支持摇晃切换所需的界面和功能,甩歌甩屏,翻转静音,甩动切换视频等,是一种非常具有使用乐趣的功能。    光线感应器      光线感应器也叫做亮度感应器,英文名称为Light-Sensor,很多平板电脑和手机都配备了该感应器。一般位于手持设备屏幕上方,它能根据 手持设备目前所处的光线亮度,自动调节手持设备屏幕亮度,来给使用者带来最佳视的觉效果。例如在黑暗的环境下,手持设备屏幕背光灯就会自动变暗,否则很刺 眼。      它的功能是用来感应光线强弱的,然后反馈到手持设备,自动调节屏幕亮度,从而达到省电的目的。      光电感应器是由两个组件即投光器及受光器所组成,利用投光器将光线由透镜将之聚焦,经传输而至受光器之透镜,再至接收感应器,感应器将收到之光 线讯号转变成电器信号,此电信讯号更可进一步作各种不同的开关及控制动作,其基本原理即对投光器受光器间之光线做遮蔽之动作所获得的信号加以运用以完成各 种自动化控制。      距离感应器      距离感应器又叫位移传感器,是利用各种元件检测对象物的物理变化量,通过将该变化量换算为距离,来测量从传感器到对象物的距离位移的机器。根据 使用元件不同,分为光学式位移传感器、线性接近传感器、超声波位移传感器等。距离感应器一般都在手机听筒的两侧或者是在手机听筒凹槽中,这样便于它的工 作。当用户在接听或拨打电话时,将手机靠近头部,距离感应器可以测出之间的距离到了一定程度后便通知屏幕背景灯熄灭,拿开时再度点亮背景灯,这样更方便用 户操作也更为节省电量。分类: |您所在的位置: &
实战案例――利用重力感应器控制飞行的游戏
实战案例――利用重力感应器控制飞行的游戏
张亚飞/崔巍
中国铁道出版社
《PhoneGap 3.0移动应用开发实战详解》本书对PhoneGap的相关知识进行介绍,共4个部分,31章。主要内容包括:PhoneGap的基本概念和开发环境的建立;原生插件的使用;软件配置、GUI设计以及一些综合性的开发案例;PhoneGap运行原理、自定义插件开发和第三方插件的使用。本节为大家介绍实战案例――利用重力感应器控制飞行的游戏。
10.4& 实战案例&&利用重力感应器控制飞行的游戏
重力感应器最常见的应用是作为游戏控制器使用,在游戏中可以使用重力感应器控制对象的移动,包括上下、左右、前后移动。在简单的情况下,感应器可能只需获取一个轴的值,再乘上某个数(灵敏度),然后添加到所控制对象的坐标系中。
上下移动也就是高度的变化,通常用在3D空间中,3D空间的建立不在本书的讨论范围。下面,我们就通过一个飞行的简单游戏来介绍一下怎样使用重力感应器,这是一个简单的2D空间应用范例。
在这个范例中,我们设置一个战斗机图片,设置CSS绝对定位,通过改变top和left样式的值来改变它在网页中的位置。
代码内容Chapter_10-05
&!DOCTYPE&HTML&&&&charset=&UTF-8&&&name=&viewport&&&&&&&&&&content=&width=device-width,&initial-scale=1.0&&Accelerometer&Game&&src=&phonegap.js&&type=&text/javascript&&&&onload=&onLoaded()&&style=&background-image:url(game_bg.png)&&&id=&fighter&&src=&fighter.png&&width=&50&&height=&80&&style=&position:display:z-index:&99999&&&&var&&&&&&&&&&&&&&&&&&&&&//&用来引用图片 &var&speedX&=&0;&&&&&&&&&&&&&//&X轴速度 &var&speedY&=&0;&&&&&&&&&&&&&&//&Y轴速度 &var&speedMax&=&10;&&&&&&&&&&//&最大速度,如果不限制则一直加大就很难停下来 &var&maxPosX;&&&&&&&&&&&&&&&&//&X轴的范围,图片不能超出这个范围 &var&maxPosY;&&&&&&&&&&&&&&&&//&Y轴的范围,图片不能超出这个范围 &&//&当DOM加载完毕 &function&onLoaded()&{ &&&&//&获取对图片的引用 &&&&fighter&=&document.getElementById(&fighter&); &&&&//&获取可视区域最大值 &&&&maxPosX&=&document.documentElement.clientWidth&-&Number(window.getComputedStyle(fighter,&null).&width.replace(&px&,&&)); &&&&maxPosY&=&document.documentElement.clientHeight&-&Number(window.getComputedStyle(fighter,&null).&height.replace(&px&,&&)); &&&&//&注册deviceready事件监听,指定deviceready事件处理函数 &&&&document.addEventListener(&deviceready&,&onDeviceReady,&false); &} &&//&PhoneGap完成加载后开始监控加速度偏移量 &function&onDeviceReady()&{ &&&&var&options&=&{&frequency:&500&};&&&&&&&&&&&&//&每隔0.5秒就获取一次加速度 &&&&//&调用Accelerometer.watchAcceleration()方法来持续获取加速度偏移量 &&&&navigator.accelerometer.watchAcceleration(onGetAccelSuccess, &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&onGetAccelError, &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&options); &} &&//&成功获取加速度偏移量后的回调函数,用来改变飞行器位置 &function&onGetAccelSuccess(acceleration)&{ &&&&//&建立速度向量 &&&&speedX&-=&acceleration.x; &&&&speedY&+=&acceleration.y; &&&&&//&限制速度,如果不限制则一直加大就很难停下来 &&&&if&(speedX&&speedMax) &&&&{ &&&&&&&speedX&=&speedMax; &&&&} &&&&else&if&(speedX&&) &&&&{ &&&&&&&speedX&=&-&speedM &&&&} &&&&if&(speedY&&speedMax) &&&&{ &&&&&&&speedY&=&speedMax; &&&&} &&&&else&if&(speedY&&) &&&&{ &&&&&&&speedY&=&-&speedM &&&&} &&&&&//&获得图片当前位置 &&&&var&posX&=&Number(fighter.style.left.replace(&px&,&&)); &&&&var&posY&=&Number(fighter.style.top.replace(&px&,&&)); &&&&//&运算获得图片新位置 &&&&var&newPosX&=&speedX&+&posX; &&&&var&newPosY&=&speedY&+&posY; &&&&&//&根据检测来判断图片位置是否超出可视范围 &&&&//&如果超出可视范围,则让它就停在边缘 &&&&//&并且初始化速度向量为0,以利于反向操作 &&&&if&(posX&&) &&&&{ &&&&&&&fighter.style.left&=&&0px&; &&&&&&&speedX&=&0; &&&&} &&&&else&if&(newPosX&&maxPosX) &&&&{ &&&&&&&fighter.style.left&=&maxPosX&+&&px&; &&&&&&&speedX&=&0; &&&&} &&&&else &&&&{ &&&&&&&fighter.style.left&=&newPosX&+&&px&; &&&&} &&&&&if&(posY&&) &&&&{ &&&&&&&fighter.style.top&=&&0px&; &&&&&&&speedY&=&0; &&&&} &&&&else&if&(newPosY&&maxPosY) &&&&{ &&&&&&&fighter.style.top&=&maxPosY&+&&px&; &&&&&&&speedY&=&0; &&&&} &&&&else &&&&{ &&&&&&&fighter.style.top&=&newPosY&+&&px&; &&&&} &} &//&不能获取加速度偏移量后的回调函数 &function&onGetAccelError()&{ &&&&alert('不能获取重力加速度,请检查!'); &} &&&&
现在,用户可以编译并将它部署到设备上进行测试,效果如图10-3所示。
这里要注意,在测试时最好不要让屏幕旋转,这可以修改AndroidManifest.xml文件,在activity元素中添加一个属性,从而让程序仅能纵向显示。
android:screenOrientation=&portrait&&
如果想让程序仅能横向显示,设置值为landscape。
android:screenOrientation=&landscape&&
喜欢的朋友可以添加我们的微信账号:
51CTO读书频道二维码
51CTO读书频道活动讨论群:【责任编辑: TEL:(010)】&&&&&&
关于&&&&的更多文章
本专题将介绍如何在移动开发平台上用Adobe AIR开发应用的入门教
本书描述了黑客用默默无闻的行动为数字世界照亮了一条道路的故事。
讲师: 11人学习过讲师: 410人学习过讲师: 228人学习过
随着互联网的快速发展,人们不仅可以在网上与外界进行
《玩转电商系统:深入剖析智慧电商平台》通过大量的案
《人人都是产品经理(纪念版)》为经典畅销书《人人都
本书主要介绍采用Visual Studio 2005的C#语言为前台,SQL Server 2005数据库为后台的数据库系统开发技术。
全书分为15章,内容
51CTO旗下网站

我要回帖

更多关于 ipad不能旋转屏幕 的文章

 

随机推荐