Swift 改变SKSpriteNode子类的纹理?

Swift 改变SKSpriteNode子类的纹理?,swift,sprite-kit,skspritenode,sktexture,Swift,Sprite Kit,Skspritenode,Sktexture,下面的类中的update函数是SKSpriteNode的子类,应该用来更改类的纹理。根据,更新纹理属性就足以更改SKSpriteNode的纹理。但是,此代码不起作用 你知道为什么吗 class CharacterNode: SKSpriteNode { let spriteSize = CGSize(width: 70, height: 100) var level = 0 init(level: Int) { self.level =

下面的类中的
update
函数是SKSpriteNode的子类,应该用来更改类的纹理。根据,更新
纹理
属性就足以更改SKSpriteNode的纹理。但是,此代码不起作用

你知道为什么吗

class CharacterNode: SKSpriteNode {       
    let spriteSize = CGSize(width: 70, height: 100)

    var level = 0

    init(level: Int) {
        self.level = level
        super.init(texture: nil, color: UIColor.clear, size: spriteSize)
    }


    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }


    func update(level: Int) {
        self.level = level            
        self.texture = textureForLevel(level: level)
    }


    func textureForLevel(level: Int) -> SKTexture {
        return SKTexture(imageNamed: "TestTexture")
    }

您的代码运行良好。事实上,这是正确的

关于
SKSpriteNode
子类,
update
方法是您添加的一个新自定义函数,因为实例方法仅对
SKScene
类有效,这只是说如果未显式调用此函数,则不会执行此函数

要对类进行测试,您可以按如下方式更改代码(我只更改了
textureForLevel
method以制作此示例):


正如您在启动
GameSecene
时所看到的,一个characterNode精灵将显示在屏幕中央。2秒钟后,纹理将发生变化。

哈,你说得对。代码很好。只是测试中的一个bug。:)
class CharacterNode: SKSpriteNode {
    let spriteSize = CGSize(width: 70, height: 100)
    var level = 0
    init(level: Int) {
        self.level = level
        super.init(texture: nil, color: UIColor.clear, size: spriteSize)
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    func update(level: Int) {
        self.level = level
        self.texture = textureForLevel(level: level)
    }
    func textureForLevel(level: Int) -> SKTexture {
        if level == 3 {
            return SKTexture(imageNamed: "TestTexture3.jpg")
        }
        return SKTexture(imageNamed: "TestTexture.jpg")
    }
}

class GameScene: SKScene {
    override func didMove(to view: SKView) {
        let characterNode = CharacterNode(level:2)
        characterNode.update(level:2)
        addChild(characterNode)
        characterNode.position = CGPoint(x:self.frame.midX,y:self.frame.midY)
        characterNode.run(SKAction.wait(forDuration: 2.0), completion: {
            characterNode.update(level:3)
        })
    }
}