首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift spritekit多场景

Swift spritekit多场景
EN

Stack Overflow用户
提问于 2014-12-31 19:46:52
回答 2查看 1.4K关注 0票数 1

我是swift的初学者,我做了一个简单的游戏,我想添加一个菜单场景。这就是我到目前为止所拥有的。

在menueScene.swift中

代码语言:javascript
运行
复制
import Foundation
import spritekit
class MenuScene: SKScene {
  override func didMoveToView(view: SKView) {
    /* Setup your scene here */

    let Label = SKLabelNode(fontNamed:"Chalkduster")
    Label.text = "Choose the Device";
    Label.fontSize = 25;
    Label.position = CGPoint(x:CGRectGetMidX(self.frame), y:665.523254394531);
    self.addChild(Label)

    let Label1 = SKLabelNode(fontNamed: "Chalkduster")
    Label1.text = "light's";
    Label1.fontSize = 20;
    Label1.position = CGPointMake(401.463256835938,545.199401855469)
    self.addChild(Label1)
   }
}

在GameViewController.swift中

代码语言:javascript
运行
复制
import UIKit
import SpriteKit

extension SKNode {
  class func unarchiveFromFile(file : NSString) -> SKNode? {
    if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
        var sceneData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)!
        var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)

        archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
        let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as MenuScene
        archiver.finishDecoding()
        return scene
    } else {
        return nil
    }
}


}

class GameViewController: UIViewController {



  override func viewDidLoad() {
    super.viewDidLoad()

    if let scene = MenuScene.unarchiveFromFile("MenuScene") as? MenuScene {
        //if scene = MenuScene.unarchiveFromFile("MenuScene") as? MenuScene {
        // Configure the view.
        let skView = self.view as SKView
        skView.showsFPS = true
        skView.showsNodeCount = true

        /* Sprite Kit applies additional optimizations to improve rendering performance      */
        skView.ignoresSiblingOrder = true

        /* Set the scale mode to scale to fit the window */
        scene.scaleMode = .AspectFill

        scene.size = skView.bounds.size

        skView.presentScene(scene)
    }
}

这不会在iOS模拟器中显示任何内容,也不会显示任何错误。我做错了什么。

EN

回答 2

Stack Overflow用户

发布于 2017-02-15 09:12:02

我认为对你来说使用可视化工具会容易得多。可以使用文件新建文件-> -> SprikeKitScene创建新场景。

在这种情况下,您将拥有"MenuScene.sks“文件。您可以将元素(标签、精灵等)拖放到此场景中。你要把你所有的逻辑都放到"ManuScene.swift“里。

在主ViewController中编写代码,以便在启动时显示菜单:

代码语言:javascript
运行
复制
class YourViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        if let scene = MainMenuScene(fileNamed:"MenuScene") {
            let skView = self.view as! SKView
            skView.ignoresSiblingOrder = true
            scene.scaleMode = .AspectFit
            skView.presentScene(scene)
        }
    }
...
}

稍后,如果您需要在另一个场景中再次打开菜单,只需调用以下代码:

代码语言:javascript
运行
复制
let nextScene = GameScene(fileNamed: "ManuScene")!
nextScene.scaleMode = .AspectFit
scene?.view?.presentScene(nextScene)
票数 1
EN

Stack Overflow用户

发布于 2015-01-01 00:20:01

你想要用于Label.position的CGPoints似乎被放在了视图之外。这是因为x和y的值太大了。我不知道为什么你的值这么大,我假设你在使用iPad作为模拟器设备。尝试将其替换为以下内容:

代码语言:javascript
运行
复制
    override func didMoveToView(view: SKView) {
    let Label = SKLabelNode(fontNamed:"Chalkduster")
    Label.text = "Choose the Device";
    Label.fontSize = 25;
    Label.position = CGPoint(x:CGRectGetMidX(self.frame), y:20.0);
    self.addChild(Label)

    let Label1 = SKLabelNode(fontNamed: "Chalkduster")
    Label1.text = "light's";
    Label1.fontSize = 20;
    Label1.position = CGPointMake(CGRectGetMidX(self.frame) ,300.0)
    self.addChild(Label1)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27720701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档