2017-04-21 75 views
0

我正在使用精靈套件進行遊戲。在我的遊戲中,我使用加速度計通過傾斜設備將節點一側移動到另一側。下面的代碼運行平穩,但在8-10次重新啓動遊戲後,對傾斜的反應有點滯後。然後我關閉應用程序,問題自行重複。SpriteKit加速度計問題

我在didMove(to view: SKView)motionManger.startAccelerometerUpdates(),並有一個看起來功能像這樣

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) 
} 

任何想法,爲什麼這種情況正在發生或有更好的方式,使節點響應以及當裝置被傾斜到左,右?謝謝!

更新:

我終於明白爲什麼accelorometer滯後。我所要做的只是將motionManger.stopAccelerometerUpdates()添加到我的GameOver場景中。這樣做後,我會回到GameScene 30加倍的時間,並且它反應良好!希望這個小小的錯誤能夠幫助未來的人!

+0

你檢查現場被釋放?如果沒有,請將'deinit {print「deinit」}'添加到場景類並轉換到新場景。 – 0x141E

+0

是的,我沒有檢查,它正在被釋放。我發現我的解決方案。菜鳥錯誤!在我的遊戲轉移功能中,我忘了添加motionManger.stopAccelerometerUpdates()。 – sicvayne

回答

0

CMMotionManager.startAccelerometerUpdates必須用作對其中一個變量的引用,每次生成移動時都不必運行它。

例如,在斯威夫特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

+0

它由於某種原因創建相同的問題... – sicvayne

+0

然後可能你有你的代碼中的另一個問題。 =( – Maetschl

+0

這可能是...嘿,但無論如何感謝!我只是去追溯我的步驟,看看是什麼原因造成的。 – sicvayne