首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何校准UIAccelerometer?

如何校准UIAccelerometer?
EN

Stack Overflow用户
提问于 2011-12-01 06:02:02
回答 1查看 413关注 0票数 0

我试图校准我的UIAccelerometer从ViewA,但我的游戏视图是ViewB。因此,我想要实现的是,让我们说,用户是在他们的一边玩,我希望我的游戏表现为,如果他们是在玩的时候,在一个正常的位置上。

所以在ViewA,我会这样做吗?:

代码语言:javascript
复制
float accelX = (acceleration.x - [[NSUserDefaults standardUserDefaults] floatForKey:@"value1"]);
[[NSUserDefaults standardUserDefaults] setFloat:accelX forKey:@"value1"];

那么,在我的游戏类中,我会在UIAccelerometer委托方法中这样做吗?:

代码语言:javascript
复制
float accelX = (acceleration.x - [[NSUserDefaults standardUserDefaults] floatForKey:@"X-Calibrate"]);
//Low Pass Filter
rollingX = (accelX * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor));
    AccelPoint.x += (rollingX*50);

然后我会做这样的事情:

代码语言:javascript
复制
mySprite.position = ccp(accelX, yValue);

我做错什么了吗?

谢谢!

编辑:ViewB的新代码,我现在还需要某种形式的摩擦吗?

代码语言:javascript
复制
    rollingX = (acceleration.x * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor));     

AccelPoint.x += (rollingX*50);

然后,在该代码之后,我将设置我的对象的位置。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-01 14:03:25

这个问题中的示例似乎以与您所描述的类似的方式进行校准:Accelerometer & Calibration - iPhone SDK

视图A的示例代码:

代码语言:javascript
复制
float accelX = (acceleration.x - [[NSUserDefaults standardUserDefaults] floatForKey:@"value1"]);

[NSUserDefaults standardUserDefaults setFloat:accelX forKey:@“value1”;

这将存储一个预先校准的值。因此,如果你曾经校准过的话,校准的效果将被最小化。

我觉得只是:

代码语言:javascript
复制
[[NSUserDefaults standardUserDefaults] setFloat:acceleration.x forKey:@"value1"];

可能是你想要的更多。这样,你将消除重力在用户的起始位置的全部影响。

您的视图B代码看起来不错,不过请记住,这将使您的角色的速度无限期地增加。考虑加入某种形式的摩擦。

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

https://stackoverflow.com/questions/8337189

复制
相关文章

相似问题

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