如何激活这个 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 以外的东西:)
我对在我的主要 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 重组为 SKScene 以外的东西:)