如何激活这个 Class 给另一个

How to activate This Class to another

我对在我的主要 GameplayScene 中使用另一个 class 有疑问。我想要做的是让 phone 的 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 中调用此 class,但我不知道该怎么做。我有变量 'grapple' 作为 MotionClass?但我不知道从那里去哪里。谁能给出一个很好的例子来做这件事?

我认为您可能对 SKScene subclass 的用途感到困惑,这就是您当前的 MotionClass。 (主要思想)是一次只使用一个 SKScene:如果你需要 MotionClass 的东西,那么你应该把它做成一个普通的 class,而不是 SKScene subclass.

我认为您可能还需要更加熟悉 OOP...在 static 属性/函数之外,您不需要 "call" class ,你实例化它(你创建一个对象:])

因此,如果您想在 GamePlayClass 中访问 MotionClass 中的好东西,则需要对 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 以外的东西:)