Swift - 将游戏分数传递给第二视图控制器

时间:2015-08-08 13:58:14

标签: ios swift uiviewcontroller segue

我正在尝试将我的GameScene的高分传递给我的GameOverViewController。我已成功添加了segue GameOver,该应用按预期工作。

GameOVerViewController的要点是显示分数,广告和重播选项。

我看了很多教程,但是我似乎正在碰壁。这是我目前的设置。

GameScene.swift包含游戏代码

ViewController包含跟踪广告和横幅广告

GameOverViewController很快会显示广告,重播并希望得分。

GameOver链接两个视图的segue的名称

scoreLabelNode.text = "Score \(score)"GameScene

上显示得分

在我的GameOVerViewController我添加了一个标签,我希望将分数显示为......

@IBOutlet weak var Label: UILabel!

var recevedString: String = ""

    override func viewDidLoad() {
    super.viewDidLoad()

        Label.text = recevedString

在我的GameScene我尝试了以下功能

func segue(){

    self.viewController.performSegueWithIdentifier("GameOver", sender: viewController)
    var secondViewController: GameOverViewController = segue.destinationViewController as GameOverViewController

    secondViewController.recevedString = scoreLabelNode.text
}

这没有正确地指出() -> () does not have a member named destinationViewController'

的以下错误

如果我出错了,是否有人知道正确的代码可以帮助发送高分数据或指向正确的方向。

谢谢。

更新代码

有人知道为什么在我做出更改后,得分仍然没有传到我的GameOVerViewController?我猜测didBeginContact to call the prepareForSegue`中缺少某些东西。谢谢。

func didBeginContact(contact: SKPhysicsContact) {

    if( moving.speed > 0 ) {

        if((contact.bodyA.categoryBitMask & scoreCategory) == scoreCategory || (contact.bodyB.categoryBitMask & scoreCategory) == scoreCategory){

            score++
            scoreLabelNode.text = "Score \(score)"
        }else {

            moving.speed = 0;

//lots of game over code removed from here

            return segue()
        }

    }

}

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if(segue.identifier == "GameOver")
    {
        let destVC = (segue.destinationViewController as? GameOverViewController)!
        destVC.recevedString = scoreLabelNode.text
    }
}

func segue(){
    self.viewController.performSegueWithIdentifier("GameOver", sender: self)
}

1 个答案:

答案 0 :(得分:4)

我猜你需要使用prepareForSegue。 试试这个:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if(segue.identifier == "GameOver")
        {
            let destVC = (segue.destinationViewController as? GameOverViewController)!
            destVC.recevedString = scoreLabelNode.text
        }
 }

现在您的segue()看起来像

func segue(){
    self.viewController.performSegueWithIdentifier("GameOver", sender: self)
}

希望这会有所帮助!