使用 Swift 创建 SKSpriteNode 子类

Posted

技术标签:

【中文标题】使用 Swift 创建 SKSpriteNode 子类【英文标题】:Make SKSpriteNode subclass using Swift 【发布时间】:2014-10-13 09:28:55 【问题描述】:

我正在尝试创建作为 SKSpriteNode 子类的类,并且我想向它添加其他属性和函数。但在第一步中,我遇到了一个错误。 这是我的代码:

import SpriteKit

class Ball: SKSpriteNode 
    init() 
        super.init(imageNamed: "ball")
    

这不是编译错误,而是运行时错误。它说:Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)fatal error: use of unimplemented initializer 'init(texture:)' for class Project.Ball

我该如何解决?

【问题讨论】:

您能发布您遇到的错误吗? 它说:Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)。还有fatal error: use of unimplemented initializer 'init(texture:)' for class Project.Ball 见***.com/a/25171066/2158465 【参考方案1】:

您必须为SKSpriteNode 调用指定的初始化程序。我真的很惊讶您没有收到关于未完全实现 SKSpriteNode 的另一个错误,您可能使用的是较旧的 Xcode6 测试版吗?

由于必须使用指定的初始化器,所以需要调用super.init(texture: '', color: '', size: '')

应该是这样的:

class Ball: SKSpriteNode 
    init() 
        let texture = SKTexture(imageNamed: "ball")
        super.init(texture: texture, color: nil, size: texture.size())
    

    required init(coder aDecoder: NSCoder) 
        fatalError("init(coder:) has not been implemented")
    

注意: 我还为 Xcode 需要的 NSCoder 添加了 init

【讨论】:

SKSpriteNode 没有 init() 初始化程序,因此您不应该在声明中使用 override 有人能帮我看看这个 Ball 类是如何在另一个 Swift 文件中初始化的吗?我无法让它运行:-/ 颜色在SKSpriteNode的指定初始化器上不能为空,所以调用super.init时需要使用UIColor.clearColor() SKColor.clearColor() 可以替代 leolobato 所写的内容。它是 SpriteKit 库的一部分。 最新的 Xcode (10.0) 不接受 nil 作为颜色。我不得不改用 .clear(基于 leolobato 和 JKT 的 cmets)

以上是关于使用 Swift 创建 SKSpriteNode 子类的主要内容,如果未能解决你的问题,请参考以下文章

Swift SKSpriteNode:按图像特征链接 Sprite

Swift : 动画 SKSpriteNode 渐变

Swift - 使用纹理数组更改 SKSpriteNode 纹理

如何使用 SKPhysicsJointPin 连接两个 SKSpriteNode - swift

Swift SKSpriteNode:检测 Tap / DoubleTap / LongPress

为啥 SKSpriteNode(fileNamed:) 使用 Swift 在 iOS 中生成 nil?