2017-05-05 57 views
3

我有一個關於在我的主GameplayScene中使用另一個類的問題。我所試圖做的是使手機的X軸的動作移動字符左右。以下是我在我的MotionClass.swift如何激活此類到另一個

import SpriteKit 
import CoreMotion 

class MotionClass: SKScene { 

    var player: Player? 

    var motionManager = CMMotionManager() 
    var destX: CGFloat = 0.0 

    override func sceneDidLoad() { 

      motionManager.accelerometerUpdateInterval = 0.2 
      motionManager.startAccelerometerUpdates(to: OperationQueue.current!) { (data, error) in 
       if let myData = data { 

        let currentX = self.player?.position.x 

        if myData.acceleration.x > 0.2 { 
         self.destX = currentX! + CGFloat(myData.acceleration.x * 100) 
         print("Tilted Right") 

        } else { 

        if myData.acceleration.x < -0.2 { 
         self.destX = currentX! + CGFloat(myData.acceleration.x * 100) 
         print("Tilted Left") 
        } 
       } 
      } 
     } 
    } 

    override func update(_ currentTime: TimeInterval) { 

     let action = SKAction.moveTo(x: destX, duration: 1) 
     self.player?.run(action) 
    } 

} 

現在我想調用這個類在我的motionBegan功能GameplayScene.swift,但我不知道如何去這樣做。我有變量'抓鬥'作爲MotionClass?但我不知道該從哪裏出發。任何人都可以舉一個很好的例子嗎?

回答

1

我想你可能會對SKScene子類的目的感到困惑,這就是你的MotionClass目前所處的位置。 (主要思想)是一次只使用一個SKScene:如果你需要MotionClass的東西,那麼你應該把它作爲一個普通的類,而不是一個SKScene子類。

我想你可能還需要熟悉多與OOP一點,以及...外static特性/功能,你不「呼」的一類,你實例它(如果使對象:])

所以,如果你有MotionClass要在GamePlayClass訪問好吃的東西,你需要到MotionClass對象

參考這可以用一個簡單的全局變量來完成......我建議將它放入GameViewController.swift:

// Here is a global reference to an 'empty' motion class object.. 
var global_motionClassObject = MotionClass() 

class GameViewController: UIViewController { 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    // ... 
    if let view = self.view as! SKView? else { 
     let scene = MotionClass(size: view.frame.size) 
     // Assign our global to the new scene just made: 
     global_motionClassObject = scene 
     scene.scaleMode = .aspectFit 

     view.presentScene(scene) 
    } 

    // ... 
} 

現在你GamePlayClass,或任何其他地方的裏面,你可以通過調用global_motionClassObject

但是訪問MotionClass,這可能不會得到預期的結果,因爲我擔心你可能需要調整你MotionClass到其他的東西比SKScene :)

+1

我已經有了讓場景= GameplayScene,我應該改變它? –

+0

在這種情況下,沒有..如果你不'.presentScene'爲motionclass,那麼你可以將它實例化_inside_你GamePlayScene的......沒有必要的全球除非你交換來回,我只是想場面 – Fluidity

+1

之間知道如何在初始變量motionManager:MotionClass之後將其實現到我的GameplayScene? –