当设备笔直而不倾斜时,如何让加速度计不移动节点?

时间:2015-07-09 15:55:23

标签: ios swift sprite-kit accelerometer

我有一个游戏,当我向左和向右倾斜移动我的节点。但是当我将设备保持笔直时,我希望它能够停止节点并添加节点的图像,这样就不会有灰色和白色的棋盘格。我该怎么做?正如您在我的代码中看到的,我使用SKTexture来更改节点图像和移动节点的速度。当设备笔直而不倾斜并且节点不移动时,我该如何更改图像?谢谢!

       func addTilt() {

       if (motionManager.accelerometerAvailable) {
    motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue()) {
        (data, error) in

        if(data.acceleration.x < -0.05) {  // tilting the device to the right
            self.heroNode.accelerometerActive == true
            self.heroNode.physicsBody?.velocity = CGVector(dx: -250, dy: 0)
            self.heroNode.texture = SKTexture(imageNamed: "heroNode1")

        } else if (data.acceleration.x > 0.05) {  // tilting the device to the left
            self.heroNode.accelerometerActive == true
            self.heroNode.physicsBody?.velocity = CGVector(dx: 250, dy: 0)
            self.heroNode.texture = SKTexture(imageNamed: "heroNode2")
        }
    }


}

}

1 个答案:

答案 0 :(得分:1)

看起来您可以在当前逻辑中添加else,以便在X加速度大于-0.05且小于0.05时处理,这大部分是直立的,在任一方向上只有一点倾斜。

此外,您应该使用=代替==,它会测试相等性,并且不会影响accelerometerActive属性的值。

而且,如果是我,我会通过抛弃额外的括号来保持代码更清晰,因为在Swift中你不需要它们。

if motionManager.accelerometerAvailable { // No parenthesis
    motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue()) { (data, error) in

        if data.acceleration.x < -0.05 {  // tilting the device to the right
            self.heroNode.accelerometerActive = true
            self.heroNode.physicsBody?.velocity = CGVector(dx: -250, dy: 0)
            self.heroNode.texture = SKTexture(imageNamed: "heroNode1")

        } else if data.acceleration.x > 0.05 {  // tilting the device to the left
            self.heroNode.accelerometerActive = true
            self.heroNode.physicsBody?.velocity = CGVector(dx: 250, dy: 0)
            self.heroNode.texture = SKTexture(imageNamed: "heroNode2")

        } else { // straight
            self.heroNode.accelerometerActive = false
            self.heroNode.physicsBody?.velocity = CGVector(dx: 0, dy: 0) // No velocity
            self.heroNode.texture = SKTexture(imageNamed: "heroNode3") // Image when straight
        }
    }
}