swift - 创建和使用类

标签 swift sprite-kit

如果我创建下面类的一个实例并从我的 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/

相关文章:

swift - 垂直移动 Swift 背景中的黑线

ios - 关于 NSScanner(扫描仪)的困惑

ios - 使用数据模型 'relate' 到其他模型(创建关系)

ios - 当用户触摸 TextView 时显示键盘时,我将如何向上插入 View ?

Swift mac 应用程序,在不知道路径的情况下运行终端命令(因此它会查看 $PATH 中的每个路径)?

ios - 在IOS中使用Storyboard和Spritekit制作游戏是一个好习惯吗?

swift - spritekit 快速碰撞检测不起作用

swift - tableview cell中水平collectionview的滚动问题

ios - 如何通过 ease in 和 ease out 创造更自然的跳跃?

ios - 弹跳球 SKPhysicsBody - 永远停止垂直弹跳