如果我创建下面类的一个实例并从我的 Controller 调用 spawn 函数, Sprite 将会出现,但我无法更改它的任何属性。
class Hero: SKSpriteNode
{
var hero = SKSpriteNode(imageNamed: "hero3")
func spawn(parentNode: SKNode, position: CGPoint, size: CGSize = CGSize(width: 50, height: 50))
{
hero.size = size
hero.position = position
hero.physicsBody = SKPhysicsBody(circleOfRadius: 25)
hero.physicsBody?.allowsRotation = false
hero.zPosition = 10
parentNode.addChild(hero)
}
}
如果我摆脱 hero 属性并将所有内容更改为 self,它就可以正常工作。
class Hero: SKSpriteNode
{
func spawn(parentNode: SKNode, position: CGPoint, size:CGSize = CGSize(width: 50, height: 50))
{
self.size = size
self.position = position
self.texture = SKTexture(imageNamed: "hero3")
self.physicsBody = SKPhysicsBody(circleOfRadius: 25)
self.physicsBody?.allowsRotation = false
self.zPosition = 10
parentNode.addChild(self)
}
}
我确定这是 swift 101,但有人可以解释为什么第一个版本没有按预期工作吗?
最佳答案
在您的第一个示例中,您创建了一个 var(基本上是 SpriteNode
中的一个 SpriteNode
)。
当您像 let hero = Hero(....)
那样实例化类时,您现在有一个名为 hero 的 SpriteNode,它具有一个名为 hero
的属性。你也可以改变。调用 hero.size 会改 rebase 础英雄,而 hero.hero.size 会改变内部 SpriteNode ....这可能不是您想要的行为。
第二个类看起来是正确的,如果你只是想创建一个 SpriteNode 并修改它。该类是 SpritNode 的子类,因此它已经是一个 SpriteNode - 无需像第一个那样在其中创建 SpriteNode。
希望这对您有所帮助!
关于swift - 创建和使用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37716039/