首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为2d游戏校准3d加速度计

为2d游戏校准3d加速度计
EN

Stack Overflow用户
提问于 2012-03-14 23:58:39
回答 2查看 1.5K关注 0票数 2

我在做一个2d游戏。手机是水平拿着的,角色会上下左右移动以避开障碍物。角色由手机上的加速计控制。如果玩家不介意(0,0) (角色静止的地方)是在手机完全平放的时候,一切都很好。在这种情况下,可以直接读取Y和X值并使用它们来控制角色。加速度计的值介于-10和10之间(它们与加速度常数相乘,以确定角色的移动速度),libgdx是使用的框架。

问题是使用(0,0)不是很舒服,所以我们的想法是校准它,以便在特定的时间点将0,0设置为手机的位置。

这就引出了我的问题,我该怎么做呢?我试着只读取当前的X和Y值,然后减去它。这样做的问题是,当手机保持90度角时,X偏移值是10 (这是最大值),因此它最终变得不可能移动,因为该值永远不会超过10 (10-10 = 0)。Z轴必须以某种方式在这里发挥作用,我只是不确定如何。

谢谢你的帮助,我尽我所能地解释,我确实试着寻找解决方案,但我甚至不知道我正在寻找的东西的合适术语是什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-06 21:27:34

这是一个老问题,但我在这里提供了答案,因为我找不到适用于安卓或LibGDX anywhere的好答案。下面的代码是基于某人为iOS发布的解决方案(抱歉,我丢失了参考)。

您可以通过以下三个部分完成此操作:

  1. 捕获表示中性方向的向量:

Vector3 tiltCalibration = new Vector3( Gdx.input.getAccelerometerX(),Gdx.input.getAccelerometerY(),Gdx.input.getAccelerometerZ() );

  • 将此向量转换为旋转矩阵:

public void initTiltControls( Vector3 tiltCalibration ){ Vector3.tmp.set( 0,0,1 );Vector3.tmp2.set( tiltCalibration ).nor();四元数rotateQuaternion =新的四元数().setFromCross( Vector3.tmp,Vector3.tmp2 );Matrix4 m=新的Matrix4( Vector3.Zero,rotateQuaternion,新的Vector3( 1f,1f,1f ) );this.calibrationMatrix = m.inv();}

  • 每当需要加速度计的输入时,首先通过旋转矩阵运行它们:

public void handleAccelerometerInputs( float x,float y,float z){ Vector3.tmp.set( x,y,z );Vector3.tmp.mul( this.calibrationMatrix );x= Vector3.tmp.x;y= Vector3.tmp.y;z= Vector3.tmp.z;在这里使用x,y和z ... }

票数 1
EN

Stack Overflow用户

发布于 2012-03-15 06:19:15

对于简单的解决方案,您可以查看以下方法:

代码语言:javascript
复制
Gdx.input.getAzimuth(), Gdx.input.getPitch(), Gdx.input.getRoll()

缺点是,与北/南/东/西相比,它们以某种方式使用内部指南针来给你的设备提供旋转。我只是在很短的时间内测试了它,所以我不是100%确定它。可能值得一看。

更复杂的方法涉及一些三角函数,基本上你必须从Gdx.input.getAccelerometerX/Y/Z()计算手机的角度。必须类似于(用于沿手机较长的一侧旋转):

代码语言:javascript
复制
Math.atan(Gdx.input.getAccelerometerX() / Gdx.input.getAccelerometerZ());

对于这两种方法,您都可以存储初始角度,并在以后再次减去它。不过,你必须注意范围,我认为Math.atan(...)-PiPi之间。

希望这能让你以某种方式开始。你也可以搜索“加速度计到俯仰/滚动/旋转”或者类似的词。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9705446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档