gpt4 book ai didi

ios - 加速度计数据不正确,延迟了几秒钟

转载 作者:行者123 更新时间:2023-11-29 02:17:38 27 4
gpt4 key购买 nike

我正在使用 Swift 和 SpriteKit 创建一个非常简单的游戏,我正在使用加速度计数据(加速度 x、y)在屏幕上移动一个球。

我会说代码工作正常,但我注意到有时(通常是在我打开应用程序时)加速度计数据不正确并延迟了几秒钟。

为什么会这样?

我正在使用以下代码读取加速度计数据:

if motionManager.accelerometerAvailable == true {
motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue.currentQueue(), withHandler:{
data, error in
self.accX = CGFloat(data.acceleration.x)
self.accY = CGFloat(data.acceleration.y)
})
}

并且函数更新以对球施加一些脉冲:

override func update(currentTime: CFTimeInterval) {
var impulse = CGVectorMake(accX, accY)
var obj = childNodeWithName("ball") as SKSpriteNode
obj.physicsBody?.applyImpulse(impulse)
}

我错过了什么吗?

谢谢

最佳答案

对于任何加速度计数据,最好对其进行过滤以消除任何不规则的尖峰。这是我最喜欢的:

double filteredAcceleration[3];
memset(filteredAcceleration, 0, sizeof(filteredAcceleration));
CMAccelerometerData *newestAccel = motionManager.accelerometerData;
filteredAcceleration[0] = (filteredAcceleration[0]*(1.0-alpha)) + (newestAccel.acceleration.x*alpha);
filteredAcceleration[1] = (filteredAcceleration[1]*(1.0-alpha)) + (newestAccel.acceleration.y*alpha);
filteredAcceleration[2] = (filteredAcceleration[2]*(1.0-alpha)) + (newestAccel.acceleration.z*alpha);

alpha 可以是 0 到 1 之间的任何值。越接近 1,响应越快,越接近 0,越平滑。我在 iPhone 上最喜欢的值是 0.2 对于像涂鸦跳跃这样的游戏,或者可能是四处移动球,它是一个很好的折衷,可以让游戏流畅而灵敏。

我不知道为什么加速计数据在启动时不正确/延迟,我的猜测是硬件必须唤醒并 self 校准,但不管为什么,如果你实现一个过滤器,它就会平滑这些违规行为,它们不会那么明显。

关于ios - 加速度计数据不正确,延迟了几秒钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28567892/

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