我是swift的初学者,我做了一个简单的游戏,我想添加一个菜单场景。 这是我到目前为止所做的。
在menueScene.swift中
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中
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模拟器中没有显示任何内容,也没有错误。我做错了什么。
答案 0 :(得分:0)
看起来像你想要的Label.position的CGPoints放在视图之外。这是因为x和y值很大。我不知道为什么你的价值这么大,我假设你在使用iPad作为模拟器设备。尝试用它替换它:
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)
}
答案 1 :(得分:0)
我认为使用可视化工具会更容易。 您可以使用文件创建新场景 - >新文件 - > SprikeKitScene。
在这种情况下,您将拥有“MenuScene.sks”文件。 您可以将元素拖放到此场景(标签,精灵等)。 您将把所有逻辑放入“ManuScene.swift”。
主ViewController中的代码,用于在启动时显示菜单:
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)
}
}
...
}
稍后如果您需要从另一个场景再次打开菜单,只需调用以下代码:
let nextScene = GameScene(fileNamed: "ManuScene")!
nextScene.scaleMode = .AspectFit
scene?.view?.presentScene(nextScene)