gpt4 book ai didi

swift - 为什么不能在初始化函数中设置 SKSprite 的名称?

转载 作者:行者123 更新时间:2023-11-28 13:08:33 26 4
gpt4 key购买 nike

我扩展了 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!)

关于swift - 为什么不能在初始化函数中设置 SKSprite 的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32039698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com