【问题标题】:Swift - passing game score to second view controllerSwift - 将游戏分数传递给第二个视图控制器
【发布时间】:2015-08-08 13:58:13
【问题描述】:

我正在尝试将我的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 theprepareForSegue 缺少一些东西。谢谢。

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)
}

【问题讨论】:

    标签: ios swift uiviewcontroller segue


    【解决方案1】:

    我猜你需要使用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)
    }
    

    希望这会有所帮助!

    【讨论】:

    • 感谢您的评论,我已按照您的建议添加了该功能,但我的代码似乎没有注意到prepare for segue。你知道我需要添加到我的didBeginContact 吗?
    • @RichTownsend segue() 被调用了吗?你检查了吗?
    • 我只在我的didBeginContat 中调用segue 我不太清楚为什么它仍然不起作用,我已经更新了上面的代码。
    • 试试这个:把return segue()换成self.performSegueWithIdentifier("GameOver", sender: self)你就会知道segue是否有效
    • 当我替换 return segue() 我得到 gameScene does not have identifier named 'performSegueWithIdentifier'任何想法?
    猜你喜欢
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    相关资源
    最近更新 更多