所以我想知道,默认的"游戏" Xcode配置。你会如何制作另一款SKScene?比如说我想要一个菜单或什么?
基本上我如何创建另一个标题为" title.swift"然后以编程方式能够来回切换它们?这样我可以从菜单到游戏场景而不会弄乱我的代码?
我无法在重新编码的代码中找到它实际上告诉swift显示游戏场景的内容,该游戏场景是使用"游戏"配置。
我想我创建了一个新类并让它继承了SKScene。
答案 0 :(得分:2)
您可以通过继承SKScene或您创建的任何子类来创建新场景。您可以通过调用SKView方法presetScene(场景:SKScene)在场景之间切换。这就是我在上一场比赛中实现它的方式:
//handles all scene transitions
protocol SceneTransitionDelegate {
//this passes the scene as a class (not object)
func transitionToScene(sceneClass:Scene.Type)
}
//make sure all you scenes are a subclass of this (so they inherit sceneDelegate):
class Scene: SKScene { //Scene inherits from SKScene
var sceneDelegate:SceneTransitionDelegate!
required override init(size: CGSize) {
super.init(size: size)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
class GameScene:Scene {
//call this method within the scene to return to the main menu
func gameOver() {
sceneDelegate.transitionToScene(MainMenuScene.self)
}
}
class MainMenuScene: Scene {
//call this method to transition to a game scene
func newGame() {
sceneDelegate.transitionToScene(GameScene.self)
}
}
//the VC that presents your scenes
class GameViewController: UIViewController, SceneTransitionDelegate {
var skView:SKView { return view as! SKView }
override func viewDidLoad() {
super.viewDidLoad()
//load first scene (e.g. MainMenu)
transitionToScene(MainMenuScene.self)
}
//SceneTransitionDelegate method
func transitionToScene(sceneClass:Scene.Type) {
let scene = sceneClass(size: skView.bounds.size)
scene.scaleMode = .AspectFill
scene.sceneDelegate = self
skView.presentScene(scene)
}
}
您可以通过向SceneTransitionDelegate添加自定义过渡方法来改进这一点。
protocol SceneTransitionDelegate {
func transitionToScene(sceneClass:Scene.Type)
func transitionToScene(sceneClass:Scene.Type, transitionAnimation:SKTransition)
}
并将新方法添加到视图控制器中,如下所示:
func transitionToScene(sceneClass: Scene.Type, transitionAnimation: SKTransition) {
let scene = sceneClass(size: skView.bounds.size)
scene.scaleMode = .AspectFill
scene.sceneDelegate = self
skView.presentScene(scene, transition: transitionAnimation)
}
并在以下场景中调用它:
func gameOverAnimated() {
let transition = SKTransition.crossFadeWithDuration(0.5)
sceneDelegate.transitionToScene(MainMenuScene.self, transitionAnimation: transition)
}
我做了一个快速演示xcode项目here。
答案 1 :(得分:2)
要创建一个新场景,您只需为场景类创建一个新文件(在iOS下查看,然后在资源中,您将看到一个精灵套件场景模板)。现在,要在场景之间切换,请回到代码中,当您想要在它们之间切换时,您可以写下:
在Swift中:
let scene = GameScene(size: CGSizeMake(1024,768))
scene.scaleMode = SKSceneScaleMode.AspectFill
let skView = self.view as SKView
let transition = SKTransition.flipVerticalWithDuration(0.5)
skView.presentScene(scene, transition: transition)
或在Objective-C中:
MenuScene *nextScene = [[GameScene alloc] initWithSize:CGSizeMake(1024, 768)];
nextScene.scaleMode = SKSceneScaleModeAspectFill;
SKTransition *transition = [SKTransition flipVerticalWithDuration:0.5];
[self.view presentScene:nextScene transition:transition];
以下是每行的简要说明。
首先,您正在初始化场景并指定其大小。
let scene = GameScene(size: CGSizeMake(1024,768))
默认情况下,这是场景大小,以防您想知道数字。
然后你需要指定它的scaleMode,默认情况下是方面填充(也就是我使用的那个)
scene.scaleMode = SKSceneScaleMode.AspectFill
接下来,您可以进行一种过渡,这种转换基本上是一种从一个场景到另一个场景动画的奇特方式
let transition = SKTransition.flipVerticalWithDuration(0.5)
最后,您使用SKView
(self.view
)来展示您的新场景。
skView.presentScene(scene, transition: transition)