Swift SpriteKit 初始化程序错误不断出现
Swift SpriteKit initializer errors keeps coming out
我在class里面写了一个Init,但是init里面一直报错,有3个错误:
1.需要一个override关键字;
2. required initializer必须由subclass提供;
3. 初始化器只能在一个类型内声明;
这是我的代码:
import SpriteKit
class GameScene: SKScene {
var man:SKSpriteNode
var runningManTextures = [SKTexture]()
override func didMoveToView(view: SKView) {
}
func loadMan() {
loadManTextures()
man.position.y -= man.size.height/2
addChild(man)
}
func loadManTextures() {
var runningAtlas = SKTextureAtlas(named: "man")
for i in 1...3 {
var textureName = "man_\(i)"
var temp = runningAtlas.textureNamed(textureName)
runningManTextures.append(temp)
}
}
init(size:CGSize){
super.init(size: size)
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
/* Called when a touch begins */
for touch: AnyObject in touches {
}
}
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
}
}
此代码在 Swift 中是非法的:
class GameScene: SKScene {
init(size:CGSize){
super.init(size: size)
}
}
为了合法,这样写:
class GameScene: SKScene {
override init(size:CGSize){
super.init(size: size)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
你的实际代码将仍然是非法的,因为你的init(size:)
方法没有初始化你的man
属性,但解决这个问题很简单,在任何情况下都是一个不同的问题。
我在class里面写了一个Init,但是init里面一直报错,有3个错误: 1.需要一个override关键字; 2. required initializer必须由subclass提供; 3. 初始化器只能在一个类型内声明;
这是我的代码:
import SpriteKit
class GameScene: SKScene {
var man:SKSpriteNode
var runningManTextures = [SKTexture]()
override func didMoveToView(view: SKView) {
}
func loadMan() {
loadManTextures()
man.position.y -= man.size.height/2
addChild(man)
}
func loadManTextures() {
var runningAtlas = SKTextureAtlas(named: "man")
for i in 1...3 {
var textureName = "man_\(i)"
var temp = runningAtlas.textureNamed(textureName)
runningManTextures.append(temp)
}
}
init(size:CGSize){
super.init(size: size)
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
/* Called when a touch begins */
for touch: AnyObject in touches {
}
}
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
}
}
此代码在 Swift 中是非法的:
class GameScene: SKScene {
init(size:CGSize){
super.init(size: size)
}
}
为了合法,这样写:
class GameScene: SKScene {
override init(size:CGSize){
super.init(size: size)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
你的实际代码将仍然是非法的,因为你的init(size:)
方法没有初始化你的man
属性,但解决这个问题很简单,在任何情况下都是一个不同的问题。