2017-05-05 4 views
3

メインのGameplaySceneに別のクラスを使用することについて質問があります。私がしようとしているのは、携帯電話のX軸の動きを左右に動かすことです。ここで今、私はmotionBegan機能で私GameplayScene.swiftでこのクラスを呼び出すようにしようとしているが、私はそれをやって行く方法がわからない、私は私の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) 
    } 

} 

です。私はMotionClassとして変数 'grapple'を持っていますか?私はそこからどこへ行くべきかわかりません。誰もこれを行う良い例を与えることができますか?

答えて

1

サブクラスの目的について混乱している可能性があります。これはあなたのMotionClassが現在のものです。 (主なアイデアは)一度に1つのSKSceneを使用することです:MotionClassのものが必要な場合は、SKSceneサブクラスではなく、単純なクラスにするだけです。私はあなたにも同様に、もう少しOOPをよく理解する必要があるかもしれないと思う

... static特性/機能の外では、あなたがオブジェクトを作る(クラスは、あなたがにそれをインスタンス化「コール」はありません:だから])

、あなたは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の内部

、またはどこ他に、あなたは私はあなたが他の何かにあなたのMotionClassを再構築する必要があるかもしれない心配だからしかし、これは望ましい結果が得られない場合がありglobal_motionClassObject

を呼び出すことによってMotionClassにアクセスすることができますSKSceneより:)

+1

私はすでにlet scene = GameplaySceneを持っています。私はそれを変更する必要がありますか? –

+0

その場合、motionclassの '.presentScene'でなければ、GamePlaySceneの_inside_をインスタンス化することができます...シーン間を行き来するまでグローバルには必要ありません。 – Fluidity

+1

私はただ欲しいだけです最初のvar motionManagerの後にGameplaySceneにそれを実装する方法を知るために:MotionClass? –

関連する問題