繁体   English   中英

SpriteKit加速度计问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM