gpt4 book ai didi

ios - 校准 UIAccelerometer?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:18:18 25 4
gpt4 key购买 nike

在我的应用中,我使用加速度计来控制游戏中的角色。现在我只允许纵向,所以用户必须向右或向左倾斜设备才能移动角色。到目前为止一切正常。我现在想要完成的是“校准”加速度计以考虑用户正在玩的当前倾斜度。假设用户侧卧,值会倾斜,因为它没有考虑到起点,因此他们将无法控制角色。因此,我试图计算初始倾斜量,然后在游戏过程中计算它,但它不起作用。

所以我在我的非游戏 View 中有一个按钮来“校准”加速度计,这是它执行的代码:

这是在 IBAction 中

[[UIAccelerometer sharedAccelerometer] setUpdateInterval:1.0f/30.0f];
[[UIAccelerometer sharedAccelerometer] setDelegate:self];

这是加速度计委托(delegate)调用

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
[[NSUserDefaults standardUserDefaults] setFloat:acceleration.x forKey:@"X-Calibrate"];
[[UIAccelerometer sharedAccelerometer] setDelegate:nil];
}

然后在我的初始游戏 View 中,我将 iVar calibrationFloat 设置为我在 NSUserDefaults 中设置的值。然后我还有一个 kFilteringFactor 来消除小的紧张。所以这是游戏加速度计委托(delegate)方法,它将 rollingX 设置为等于所有内容,然后我根据 rollingX 移动角色:

- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
rollingX = ((acceleration.x - calibrationFloat) * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor));
}

但是这不起作用,校准似乎没有做任何事情,我不确定为什么。有没有人设置为什么这不起作用?

最佳答案

我可以给你一些建议。 rollingX 的计算不正确,它会给出 -1 - +1 范围之外的值,您需要一种方法来检测它达到极限并适本地调整它。简单地偏移一个轴也是行不通的。加速度计在 3D 空间中工作。为了使您的计算正确进行,手机在 z 平面中必须始终为 0。用户将手机旋转到 z 平面越远,设备在 x 平面上输出的读数就越小。加速度计感应重力,因此飞机相对于重力是固定的。

为了进行有效的校准,您需要对所有 3 轴应用连续矩阵变换,因为您需要加权偏移(例如,随着 z 增加,更多地关注 y 而不是 x 等)。

关于ios - 校准 UIAccelerometer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13225713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com