小编典典

如何在Swift中过渡场景

swift

在Objective-C中,使用Sprite-Kit,我将在Objective-C中 成功 使用类似以下代码的内容来展示新场景

if ([touchedNode.name  isEqual: @"Game Button"]) {
        SKTransition *reveal = [SKTransition revealWithDirection:SKTransitionDirectionDown duration:1.0];
        GameScene *newGameScene = [[GameScene alloc] initWithSize: self.size];
        //  Optionally, insert code to configure the new scene.
        newGameScene.scaleMode = SKSceneScaleModeAspectFill;
        [self.scene.view presentScene: newGameScene transition: reveal];
    }

在尝试将我的简单游戏移植到Swift时,到目前为止,我已经完成了这项工作…

for touch: AnyObject in touches {
        let touchedNode = nodeAtPoint(touch.locationInNode(self))
        println("Node touched: " + touchedNode.name);
        let touchedNodeName:String = touchedNode.name

        switch touchedNodeName {
        case "Game Button":
            println("Put code here to launch the game scene")

        default:
            println("No routine established for this")
        }

但是我不知道要写什么代码才能真正过渡到另一个场景。问题:

  1. 有人可以提供在Swift中使用SKTransition的示例吗?
  2. 假设您将使用Objective-C,通常是否会创建另一个“文件”以将另一个场景代码放入另一个场景,或者是否有使用Swift的方式,这意味着我应该以不同的方式处理?

谢谢


阅读 265

收藏
2020-07-07

共1个答案

小编典典

首先要解决第二个问题,这取决于您。如果您愿意,您可以继续遵循Objective-C的约定,即每个文件只有一个类,尽管这不是必需的,并且在Objective-
C中也没有。话虽这么说,如果您有几个紧密相关的类,但是它们不是由很多代码组成,那么将它们组合在一个文件中并不是没有道理的。只要做对的事情,就不要在单个文件中编写大量的代码。

然后是第一个问题…是的,您已经掌握了很多。基本上,从您起步的地方,您需要通过其大小创建一个GameScene实例:初始值设定项。从那里,您只需设置属性并调用present。

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    super.touchesBegan(touches, withEvent: event)

    guard let location = touches.first?.locationInNode(self),
        let scene = scene,
        nodeAtPoint(location) == "Game Button" else {
        return
    }

    let transition = SKTransition.reveal(
        with: .down, 
        duration: 1.0
    )

    let nextScene = GameScene(size: scene.size)
    nextScene.scaleMode = .aspectFill

    scene.view?.presentScene(nextScene, transition: transition)
}
2020-07-07