[英]SpriteKit Accelerometer issues
我正在使用Sprite-Kit开发游戏。 在我的游戏中,我使用加速度计通过倾斜设备使节点左右移动。 以下代码可以正常运行,但是在重新启动8-10游戏后,响应倾斜会有些滞后。 然后,我关闭该应用程序,问题会自行重复。
我在didMove(to view: SKView)
有motionManger.startAccelerometerUpdates()
didMove(to view: SKView)
并且具有一个看起来像这样的函数
func processUserMotion(forUpdate currentTime: CFTimeInterval) {
Ball.position.x += xAcceleration * 50 // xAcceleration is a variable that is a CGFloat = 0
motionManger.accelerometerUpdateInterval = 0.1
motionManger.startAccelerometerUpdates(to: OperationQueue.current!) { (data:CMAccelerometerData?, error:Error?) in
if let accelerometerData = data {
let acceleration = accelerometerData.acceleration
self.xAcceleration = CGFloat(acceleration.x) * 0.75 + self.xAcceleration * 0.25
}
}
}
override func update(_ currentTime: TimeInterval) {
processUserMotion(forUpdate: currentTime)
}
是否知道为什么会发生这种情况,还是知道在设备向左右倾斜时使节点响应良好的更好方法? 谢谢!
更新:
我终于弄清楚了加速度计为何落后。 我要做的就是将motionManger.stopAccelerometerUpdates()
添加到GameOver场景中。 这样做之后,我将过渡到GameScene 30次以上,并且响应良好! 希望这个小错误将来对您有所帮助!
CMMotionManager.startAccelerometerUpdates必须用作对变量之一的引用,不必在每次生成运动时都运行它。
例如在Swift 3中
class GameScene: SKScene {
private var ballNode : SKSpriteNode?
private let manager = CMMotionManager()
override func didMove(to view: SKView) {
self.ballNode = self.childNode(withName: "ball") as? SKSpriteNode
manager.startAccelerometerUpdates()
manager.accelerometerUpdateInterval = 0.01
manager.startAccelerometerUpdates(to: OperationQueue.current!){ (data:CMAccelerometerData?, error:Error?) in
if let accelerometerData = data {
let acceleration = accelerometerData.acceleration
self.ballNode?.physicsBody?.velocity.dx += 10*CGFloat(acceleration.x)
}
}
}
override func update(_ currentTime: TimeInterval) {
//nothing here
}
}
源代码: https : //github.com/Maetschl/SpriteKitExamples/tree/master/CoreMotionTest
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.