首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpriteKit场景

SpriteKit场景
EN

Stack Overflow用户
提问于 2015-05-05 09:53:07
回答 2查看 897关注 0票数 1

我想知道如何在SpriteKit中添加更多的场景。如果我在GameViewController中使用从SpriteKit生成的代码行

代码语言:javascript
复制
if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene 

但是,如果我创建了一个也是SKScene类型的类,并将其添加到SKView中,则可以很好地工作。

代码语言:javascript
复制
let newscene = GameMenu()
skView.presentScene(newscene)

这是行不通的。它只显示一种褪色的灰色,只有一小部分节点,但实际上什么也没有出现。SpriteKit使用unarchiveFromFile创建场景的方式有什么问题吗?我甚至没有使用故事板或GameScene.sks。整个游戏都是通过编程创建的。如果我尝试为菜单创建另一个ViewController并使用presentViewController,还有一个问题。当它尝试运行时,我也得到了一个错误,说“无法将'UIView‘类型的值转换为’SKView‘。”我使用与GameViewController类似的相同行对其进行转换。

代码语言:javascript
复制
let skView = self.view as! SKView

这就是它一直在折断的线。如果任何人对如何解决这个问题有任何见解,将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2016-06-18 01:12:14

下面是我通常做的场景:

  1. 转到文件->新建->文件...
  2. 单击Cocoa类,单击next
  3. 随意命名,使其成为SKScene的子类,在新类中选择swift
  4. ,使其如下所示:

导入SpriteKit类GameScene: SKScene { override init(size: CGSize) { super.init(size: size) //其他初始化代码}是否需要init?(编码器aDecoder: NSCoder) {super.init(编码器: aDecoder) }//其他函数,如override func touchesBegan,update等。

  • 如果你想先在viewDidLoad中显示场景,GameViewController,你可以输入:

让scene =GameScene(大小: skView.bounds.size) skView.presentScene(scene)

(应该已经为您创建了skView,但如果不是,则将其:let skView = self.view as! SKView放在viewDidLoad.

  • Then中的所有let scene = GameScene... etc和内容之前。如果您想要从不同的SKScene而不是从视图控制器呈现场景,请执行以下操作:

让scene =GameScene(大小: self.frame.size) self.view?.presentScene(scene)

票数 4
EN

Stack Overflow用户

发布于 2015-05-05 22:22:02

如果你正在以编程的方式构建一个场景,不要试图从一个文件(它可能存储了一个不同的场景)中对其进行单元划分。取而代之的是它的初始化器:例如GameMenu()GameMenu(size: whateverSize),或者你已经定义的自定义初始化器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30043006

复制
相关文章

相似问题

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