从GameVC转移到另一个View Controller

时间:2017-09-15 08:09:07

标签: ios swift3

我有一个应用程序,当你打开它时,会引导你进入主菜单,在那里你可以选择游戏的难度。按主菜单中的任意按钮,即可加载游戏场景。

我的问题基本上是现在我想要达到另一个视图控制器,它与主菜单具有相同的类,在达到条件之后,例如获得10分或类似的分数。 我怎样才能做到这一点?我使用拖放功能在故事板上做了很多工作。

我对快速编程非常陌生,如果你能就如何让它变得更好而给我一些建议会很好。

编辑:我收到了这段代码:

func addScore(playerWhoWin: SKSpriteNode){

    ball.position = CGPoint(x: 0, y: 0)
    ball.physicsBody?.velocity = CGVector(dx: 0, dy: 0)

    if playerWhoWin == main {
        score[0] += 1
        ball.physicsBody?.applyImpulse(CGVector(dx: 22 , dy: 22))
    }
    else if playerWhoWin == enemy {
        score[1] += 1
        ball.physicsBody?.applyImpulse(CGVector(dx: -22 , dy: -22))
    }

    topLbl.text = "\(score[1])"
    btmLbl.text = "\(score[0])"
}

现在在我得到的更新功能中:

override func update(_ currentTime: TimeInterval) {

    switch currentGameType {
    case .easy:
        enemy.run(SKAction.moveTo(x: ball.position.x, duration: 1.4))
        break
    case .medium:
        enemy.run(SKAction.moveTo(x: ball.position.x, duration: 1.0))
        break
    case .hard:
        enemy.run(SKAction.moveTo(x: ball.position.x, duration: 0.7))
        break
    case .player2:
        break
    }

    if ball.position.y <= main.position.y - 70 {
        addScore(playerWhoWin: enemy)
            moveToWinScreen() // <- This is the function I'm trying to write
    }
    else if ball.position.y >= enemy.position.y + 70 {
        addScore(playerWhoWin: main)
            moveToWinScreen()
    }
}

游戏本身就像它应该的那样工作,我可以输入它,选择一个难度并留下一个&#34; menue&#34;在gamescene中的按钮(我通过拖放故事板与主菜单链接)

现在我需要一个名为moveToWinScreen的函数,它应该是:

func moveToWinScreen(){

    if score[0] > 9 {
        //here I want to move to the UIViewController that shows you that you won. This UIViewController got the storyboard ID: mainwinVC , and has the same class as the mainmenue: MenueVC.
    }
    if score[1] > 9 {
    //here I want to move to the UIViewController that shows you that your opponent won. This UIViewController got the storyboard ID: enemywinVC , and has the same class as the mainmenue: MenueVC.
    }
}

2 个答案:

答案 0 :(得分:1)

您必须为此创建自定义委托方法。

例如:raywenderlich sprite kit tutorial

在这个怪物游戏中,他们使用委托方法通过制作委托方法来计算怪物碰撞:

<h3>Projects </h3>
<div >
    <ul class= "grid grid-pad">
        <a *ngFor="let project of projects" class="col-1-4">
            <li class ="module project" >
                <h4 tabindex ="0">{{project.name}}</h4>
            </li>
        </a>
    </ul>
</div>

在上面的代码中,您可以看到如果目标已实现,则将场景带到新视图。 场景上的游戏是另一个告诉分数和结果的视图。

希望这对你有所帮助。有关更多信息,您可以浏览上方链接。

答案 1 :(得分:1)

FOR VIEWCONTROLLER

1.在你的游戏类中

class GameScene: SKScene {
var viewController: UIViewController?
}
  1. 然后在GameViewController类

    中 在skView.presentScene(场景)之前

    添加此行代码

    scene.viewController = self

  2. enter image description here

    现在,您可以直接访问viewController。只需在此viewController上调用segue:

    func returnToMainMenu(){
    self.viewController.performSegueWithIdentifier("menu", sender: vc)
    }
    

    我已经实现并尝试了这段代码,它对我来说很好用

    Refer