mno*_*not 3 ios sprite-kit swift
我正在使用带有swift的spritekit,我只是想尝试呈现一个新的场景......但是有些东西是错误的,并且会抛出错误.我很确定这是正确的语法,这真的让我陷入了一个循环.
这条线
let skView = self.view as SKView
Run Code Online (Sandbox Code Playgroud)
给我错误"SKView?不能转换为SKView
任何建议表示赞赏!*我目前的代码如下:
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch: AnyObject in touches{
let location = touch.locationInNode(self)
if(self.nodeAtPoint(location) == self.playButton)
{
var scene = PlayScene(size: self.size)
let skView = self.view as SKView
// Configure the view.
/* 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
skView.presentScene(scene)
}
}
}
Run Code Online (Sandbox Code Playgroud)
ABa*_*ith 14
问题是view属性on SKScene是一个optional(SKView?),因为SKScene它不一定有一个包含视图; 在呈现之前它包含了什么?没有.
要解决您的问题,您需要通过展开view属性来检查场景是否具有视图,通过使用可选绑定,例如:
if let view = self.view {
let scene = PlayScene(size: self.size)
scene.scaleMode = .AspectFill
view.presentScene(scene)
}
Run Code Online (Sandbox Code Playgroud)
如果有人按下它,你可以非常肯定你SKScene已被呈现(因而view不是nil) - 因此你可以强行解包view,如下:
let scene = PlayScene(size: self.size)
scene.scaleMode = .AspectFill
view!.presentScene(scene)
Run Code Online (Sandbox Code Playgroud)
此外,您不需要配置SKViewagain(skView.ignoresSiblingOrder = true),因为这可能已经完成了GameViewController.
编辑:
这条线let skView = self.view as! SKView很可能来自GameViewController(一个子类UIViewController).如果你看看文档UIViewController,SKScene你会发现它们都有一个view属性:
class UIViewController: /* Superclass and Protocols */ {
var view: UIView!
// ...
}
class SKScene: SKEffectNode {
weak var view: SKView?
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是它们的类型不同意味着您使用它们的方式不同.在SKScene上面看到关于展开的情况.在这种情况下UIViewController,您需要SKView使用该行进行转换:
let skView = self.view as! SKView
Run Code Online (Sandbox Code Playgroud)
因为UIView没有表达所需的方法SKScene.(有关转换的更多信息,我建议你看看Swift编程语言:类型转换)
通常你不会被允许转换UIView为SKView(请记住,这SKView是一个子类UIView).在Playgrounds中尝试以下操作:
let view = UIView()
let skView = view as! SKView
Run Code Online (Sandbox Code Playgroud)
你应该得到一个错误:
无法将'UIView'(0x1041d0eb0)类型的值转换为'SKView'(0x10da10718)
然而,你可以从投UIView给SKView你GameViewController,因为自定义类的GameViewController的view已被设置为SKView:
我希望这有助于消除你的困惑.
| 归档时间: |
|
| 查看次数: |
3647 次 |
| 最近记录: |