【发布时间】:2015-02-17 17:54:38
【问题描述】:
我正在使用 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)
}
我错过了什么吗?
谢谢
【问题讨论】:
-
你确定是加速度计数据,而不是物理引擎因为“丢帧”而试图追赶吗?在任何情况下,当应用程序进入后台时停止加速计,并在应用程序进入前台时重新启动它可能是个好主意。这也应该会显示一个暂停屏幕,以便用户有时间为游戏继续做准备。
-
其实这点很好。我同意您的“引擎由于错过帧而试图追赶”。这就是我遇到问题时的感觉。如您所说,我将尝试停止并重新启动加速度计。谢谢你。
标签: ios swift sprite-kit game-physics