如何在玩家与对象发生碰撞时更改View Controller?

时间:2015-06-26 18:58:27

标签: ios iphone swift collision viewcontroller

当您的播放器与对象发生碰撞时,我无法弄清楚如何更改视图控制器。

我想要一个菜单​​来弹出显示一个菜单按钮和一个重播按钮,这些额外的按钮在这个时刻并不重要。我不确定这些游戏菜单是如何制作的,我在考虑切换视图控制器,如果你确切知道它们是如何制作的,请告诉我。

这是我目前的代码,它唯一能做的就是显示游戏结束的标签,当点击该标签时游戏将重启:

import Foundation
import AVFoundation
import SpriteKit

class GameScene: SKScene, SKPhysicsContactDelegate {

var movingGround: PPMovingGround!
var square1: PPSquare1!
var wallGen: PPWallGen!
var diamondGen: PPDiamondGen!

var isStarted = false
var isGameOver = false
var isDiamondContact = false

var playerNode: SKNode!

override func didMoveToView(view: SKView) {

//code that is not important was deleted
func collisionWithDiamond() {
    isDiamondContact = true 
}

func restart() {

    let newScence = GameScene(size: view!.bounds.size)
    newScence.scaleMode = .AspectFill

    view!.presentScene(newScence)
}

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    if isGameOver {
        restart()

    } else {
        square1.flip()
    } 
}

override func update(currentTime: CFTimeInterval) {

}

// MARK: - SKPhysicsContactDelegate
func didBeginContact(contact: SKPhysicsContact) {

    if !isGameOver {
        gameOver()
    } else {
        !isDiamondContact
        collisionWithDiamond()
    } 
}

注意:我删除了不相关或不必要的代码。

更新

链接到游戏的游戏:https://www.youtube.com/watch?v=WUibTETfEQY

跳至2:32在屏幕上看到游戏

链接到屏幕上的游戏图像:Image

(我无法在此处发布图片,因为我还没有获得所需的10个重复点。)

2 个答案:

答案 0 :(得分:1)

//编辑答案

这将是最简单的。创建一个新的GameOverScene.swift,它是一个SKScene。然后使用背景图像自定义该场景,按SKLabelNodes。结帐creating buttons in skview to point to different scenes

当游戏以GameScene结束时,

let gameOverScene: GameOverScene = GameOverScene(size: self.size)
self.view!.presentScene(gameOverScene, transition: SKTransition.doorsOpenHorizontalWithDuration(1.0))

这是一个实施此项目的项目,http://www.raywenderlich.com/76741/make-game-like-space-invaders-sprite-kit-and-swift-tutorial-part-2

//首先回答------------------------------------------- ----

如果你想切换viewControllers,你必须像这样或用segue呈现新的viewController,

self.view?.window?.rootViewController?.presentViewController(newView, animated: true, completion: nil)

self.view?.window?.rootViewController?.performSegueWithIdentifier("id", sender: AnyObject)

否则创建一个SKView并添加按钮,然后在游戏结束时将其添加到场景中或之前添加,隐藏它,然后显示它。用户选择后,将其删除或隐藏,

SKView.hidden = false
SKView.hidden = true

添加SKView,

self.view?.addSubview(SKView)

简单的SKView叠加层,

let view1 = SKView(frame: CGRectMake(0, 0, 200, 200))
view1.center = self.view!.center
self.view?.addSubview(view1)

答案 1 :(得分:0)

如果游戏结束并且您想要提供选择性菜单,则可以显示UIAlertView,向用户显示您想要的任何选项。从那里他们可以重新启动游戏,或者他们可以选择去其他视图,例如管理他们的玩家统计数据的东西(我不知道你的游戏到底是什么)。