如果我在下面创建该类的实例并从控制器中调用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)
}
}
如果我摆脱了英雄财产,并且将所有东西都更改为自我,那就很好用了。
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)
}
}
我敢肯定这是迅速的101,但有人可以解释一下为什么第一个版本无法按预期运行吗?
在第一个示例中,您创建了一个var(基本上是SpriteNode
内的SpriteNode
)。
当像您实例化该类时let hero = Hero(....)
,现在有一个名为hero的SpriteNode,具有一个名为的属性hero
。您可以更改任何一个。调用hero.size会更改基本英雄,而hero.hero.size会更改内部SpriteNode...。这可能不是您想要的行为。
如果您只是尝试创建一个SpriteNode并对其进行修改,则第二个类看起来是正确的。该类是SpritNode的子类,因此它已经是SpriteNode-无需像第一个那样在其中创建一个类。
希望这可以帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句