簡體   English   中英

如何從Swift SpriteKit中的另一個SKScene訪問變量

[英]How to access variables from another SKScene in Swift SpriteKit

我從其他類訪問變量時遇到問題。 這是我的代碼。 這是我正在嘗試訪問變量“ lastSelection”的類,這也是第一個調用來查看的SKScene。

class FighterPlaneselect : SKScene {
    var lastSelection:String = ""

    override func didMoveToView(view: SKView)  {
        if(true) {
            lastSelection = "Mustang"
        }
    }
}
//Here is the second class called "GameField"
class GameField : SKScene {
    var FighterPlane : FighterPlaneSelect!
    override func didMoveToView(view: SKView) {
        FighterPlane = FighterPlaneSelect()
        print(FighterPlane.lastSelection)
    }
}

無論何時打印出來,都會打印“”。 它應該打印“野馬”。

在這行上:

FighterPlane = FighterPlaneSelect()

您實例化了該類的 SKScene。 問題是,它從未顯示,因此從未調用過func didMoveToView(view: SKView)方法。

您需要的是對其他場景的引用。

一種可能性是執行以下操作:

class FighterPlaneSelect : SKScene {
var lastSelection:String = ""

override func didMoveToView(view: SKView)  {
        if(true) {
            lastSelection = "Mustang"
        }
    }
}

//Here is the second class called "GameField"
class GameField : SKScene {
    var fighterPlane : FighterPlaneSelect!
    override func didMoveToView(view: SKView) {
        print(FighterPlane.lastSelection)
    }
}

//Here is in the GameScene
let fighterPlaneSelect = FighterPlaneSelect
//show the scene to make it move to view
//then assign the variable inside the gameField object
let gameField = GameField()
gameField.fighterPlane = fighterPlaneSelect

您可以在場景的init方法中初始化該變量:

  class FighterPlaneselect : SKScene {
    var lastSelection:String = ""

    override  init(size: CGSize){

        super.init(size: size)

         lastSelection = "Mustang"

    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func didMoveToView(view: SKView)  {

    }
}

然后像現在一樣使用它:

class GameField : SKScene {
    var FighterPlane : FighterPlaneselect!

    override func didMoveToView(view: SKView) {


        FighterPlane = FighterPlaneselect(size: self.size)

        println(FighterPlane.lastSelection)
    }
}

很簡單! 只需在類外聲明lastSelection即可!!

class FighterPlaneselect : SKScene {
var lastSelection:String = "" //Declared in the class
}

var lastSelection:String = "" //Declared outside the class
class FighterPlaneselect : SKScene {

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM