ios - Swift:从 GameViewController 设置 GameScene 变量

标签 ios swift sprite-kit

我需要将多个变量从 GameViewController 传递到 GameScene。

游戏 View Controller :

override func viewDidLoad() {
    super.viewDidLoad()

    if let scene = GameScene(size: view.frame.size) as GameScene? {

        // Configure the view.
        let skView = self.view as! SKView
        skView.showsFPS = false
        skView.showsNodeCount = false
        skView.showsPhysics = false

        /* Sprite Kit applies additional optimizations to improve rendering performance */
        skView.ignoresSiblingOrder = true

        /* Set the scale mode to scale to fit the window */
        scene.scaleMode = .AspectFill

        // pass game set-up variables
        scene.idDefence = idDefence
        scene.idAttack = idAttack
        scene.tries = tries
        scene.runs = runs
        scene.teamShirt = teamShirt

        skView.presentScene(scene)
    }
}

GameScene - 具有上面列出的变量(idDefence)等。

class GameScene: SKScene, SKPhysicsContactDelegate {

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

    // variables - set-up defenders
    var idDefence = 0
    ...

这符合要求,但 idDefence 变量(从 GameViewController 正确打印为数字)不会传递到事件的 GameScene 并保持为 0。GameScene 代码:

override init(size: CGSize) {
    super.init(size: size)

    physicsWorld.gravity = CGVectorMake(0.0, 0.0)
    physicsWorld.contactDelegate = self

    getDefenceInfo()
    getAttackInfo()

    loadLevel()
    spawnPlayers()
    spawnDefenders()

}

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


// get attack variables from database
func getDefenceInfo(){
println("defence ID: \(idDefence)")
}

非常感谢任何帮助

最佳答案

您正在 init(size:) 初始化程序中检查这些属性的值;线上调用:

if let scene = GameScene(size: view.frame.size) as? GameScene {
    ... 
}

此时,来自 GameViewController 的设置属性值的代码尚未运行;因此它们仍然有默认值。

如果您检查 GameScenedidMoveToView 方法中的属性值,您将看到它们都有正确的值,因为 didMoveToView code> 将在 skView.presentScene(scene) 之后调用。

关于ios - Swift:从 GameViewController 设置 GameScene 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31257711/

相关文章:

android - 屏幕上再现的颜色因平台而异

ios - Iphone 5 全屏尺寸

jquery - 我该如何做到这一点,当人们将我的移动网站保存到他们的主屏幕时,它会像 Kahoot.it 一样删除 Safari?

ios - 确定用户是否允许 iOS 7 中的本地通知

ios - "Missing argument parameter ' 队列 ' in call"

ios - 构建时出现 Apple LLVM 5.0 错误

objective-c - 如何让 Swift Cocoapod 在 Objective C 项目中工作?

ios - 查看 Apple 的 "Adventure Game"教程 "in"是什么意思?

ios - SKEmitterNode 将粒子速度更改为已发射的粒子

ios - 你如何使 Storyboard上的 UIImageView 可点击(快速)