为什么不能在初始化函数中设置 SKSprite 的名称?
Why can not set name of SKSprite in its init function?
我扩展了 SKSpriteNode 并想在它的初始化函数中设置它的名称属性:
class Ship: SKSpriteNode {
var id: Int
/**
* Image name of sprite image for this bubble.
**/
var image: String
//some other vars but NOT name, because its super class SKNode has already name
init(ship: (name: String, <other vars>), position: CGPoint) {
let texture = SKTexture(imageNamed: self.image)
super.init(texture: texture, color: UIColor.clearColor(), size: texture.size())
self.name = name //here I set its name!!!
self.position = position
self.physicsBody = SKPhysicsBody(circleOfRadius: self.size.width / 2)
self.physicsBody!.dynamic = true
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
但后来,当我创建一个 'Ship' 时(ship[1] 是一些值,包括名称):
var titanic = Ship(ship: ship[1], position: shipPosition!)
println(titanic.name) //nil
self.addChild(titanic)
titanic.name = 'titanic'
println(titanic.name) //titanic
如您所见 - 名称未在初始化时设置 - 我必须在创建后设置它。
如何在它的初始化方法中设置这个名字?还是只能在创建后才命名?
在此上下文中,self.name = name
实际上与 self.name = self.name
的意思相同。
您正试图在 tuple 中传递变量,因此您可能需要 self.name = ship.name
。 (甚至 name = ship.name
。)
或者,您可以将这些全部作为参数直接传递给初始化程序:
init(named name: String, <other vars>, position: CGPoint) {
// ...
self.name = name
}
Ship(named: "titanic", <other vars>, position: shipPosition!)
你看过这个吗:How to get SKSpriteNode name??
尝试
sprite1.name = @"sprite1";
正如@jtbandes 指出的那样,直接初始化名称可能更容易。
我扩展了 SKSpriteNode 并想在它的初始化函数中设置它的名称属性:
class Ship: SKSpriteNode {
var id: Int
/**
* Image name of sprite image for this bubble.
**/
var image: String
//some other vars but NOT name, because its super class SKNode has already name
init(ship: (name: String, <other vars>), position: CGPoint) {
let texture = SKTexture(imageNamed: self.image)
super.init(texture: texture, color: UIColor.clearColor(), size: texture.size())
self.name = name //here I set its name!!!
self.position = position
self.physicsBody = SKPhysicsBody(circleOfRadius: self.size.width / 2)
self.physicsBody!.dynamic = true
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
但后来,当我创建一个 'Ship' 时(ship[1] 是一些值,包括名称):
var titanic = Ship(ship: ship[1], position: shipPosition!)
println(titanic.name) //nil
self.addChild(titanic)
titanic.name = 'titanic'
println(titanic.name) //titanic
如您所见 - 名称未在初始化时设置 - 我必须在创建后设置它。
如何在它的初始化方法中设置这个名字?还是只能在创建后才命名?
在此上下文中,self.name = name
实际上与 self.name = self.name
的意思相同。
您正试图在 tuple 中传递变量,因此您可能需要 self.name = ship.name
。 (甚至 name = ship.name
。)
或者,您可以将这些全部作为参数直接传递给初始化程序:
init(named name: String, <other vars>, position: CGPoint) {
// ...
self.name = name
}
Ship(named: "titanic", <other vars>, position: shipPosition!)
你看过这个吗:How to get SKSpriteNode name??
尝试
sprite1.name = @"sprite1";
正如@jtbandes 指出的那样,直接初始化名称可能更容易。