在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") }
但是我不知道要写什么代码才能真正过渡到另一个场景。问题:
谢谢
首先要解决第二个问题,这取决于您。如果您愿意,您可以继续遵循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) }