【问题标题】:Make a class of type SKNode in swift快速创建一个类型为 SKNode 的类
【发布时间】:2016-02-02 04:40:54
【问题描述】:

我试图在 swift 中创建一个类型为 sknode 的类,该类还将包含一个持有位置的参数。我在尝试创建类时不断收到错误消息,说“初始化程序不会覆盖其超类中的指定初始化程序”我不确定我做错了什么,或者应该如何创建该类。

import Foundation

import SpriteKit
class hud:SKNode {

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

    override init(position:CGPoint){

    }
}

【问题讨论】:

    标签: sprite-kit swift2


    【解决方案1】:

    您收到 "initializer does not override a designated initializer from its super class" 错误,因为您已将 init(position: CGPoint) 初始化程序标记为覆盖。 SKNode 没有这样的初始化程序,所以没有什么可以覆盖的。

    只需删除覆盖即可消除错误,并且您的 Hud 类将有一个以 CGPoint 作为参数的初始化程序。

    init(position: CGPoint) {...}

    值得注意的是,SKNode 已经有一个 CGPoint 类型的名为 position 的属性,因此 SKNode 可能已经具备您所追求的功能。否则,您可能希望将您的属性称为其他名称(例如 myPosition),以避免与现有属性发生冲突。

    【讨论】:

    • 但是当我删除覆盖的东西时,我得到另一个错误,说在返回初始化程序之前没有调用 Super.init
    • 嘿。如果您能回答,我还有另一个关于菜单类的问题。这是它的链接stackoverflow.com/questions/35237669/…
    【解决方案2】:

    去掉 override 关键字,别忘了在你的 init 方法中调用原来的初始化器:

    class hud:SKNode {
    
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    
        init(position:CGPoint){
            super.init()
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    相关资源
    最近更新 更多