在SpriteKit中如何将一个场景委托给另一个场景?

问题描述 投票:0回答:1

我需要一些帮助,在SpriteKit中设置委托,第二个场景中的函数没有被调用,但我就是不知道我做错了什么。

非常感谢

protocol receivingStringDelegate:class {

    func didReceiveString(message:String)
}

class GameScene: SKScene  {

    weak var gamescene_transmissiondelegate: receivingStringDelegate?

    private func sendString(message:String){

        gamescene_transmissiondelegate?. didReceiveString(message)

    }
}


class SecondScene: SKScene, receivingStringDelegate  {

   // here I get stuck, what to do?
    var gameScene : GameScene = GameScene()

     override func didMove(to view: SKView) {
        gameScene.gamescene_transmissiondelegate = self
     }

     func didReceiveString(message:String) {
       print ("hi there", message)
     }

}
sprite-kit delegates
1个回答
1
投票

我想用场景属性与全局类来做。

class ConnectionScene: SKScene {

    private var player1pos: CGPoint = CGPoint.zero
    private var player2pos: CGPoint = CGPoint.zero

    ///some code in this scene sets player positions

    func startMultiplayerGame() {

        //this assumes your scene is setup in the editor not programmatically
        if let gameScene = GameScene(fileNamed: "GameScene") {

            gameScene.scaleMode = .aspectFill
            gameScene.player1pos = player1pos
            gameScene.player2pos = player2pos

            self.view?.presentScene(multiplayerScene, transition: SKTransition.reveal(with: .down, duration: 1.0))
        }
    }
}

class GameScene: SKScene {

    var player1pos: CGPoint = CGPoint.zero
    var player2pos: CGPoint = CGPoint.zero

    override func sceneDidLoad() {

        //sceneDidLoad happens first
        super.sceneDidLoad()

        //do setup that doesn't require passed in variables in here

        //this isn't set from connectScene yet so won't have the values
        print("player1pos \(player1pos)")
        print("player2pos \(player2pos)")
    }

    override func didMove(to view: SKView) {

        //didMove happens last and already has the variables assigned

        //now do setup that requires these variables

        //this now has value from connectScene
        print("player1pos \(player1pos)")
        print("player2pos \(player2pos)")  
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.