Swift 放置SKNode后是否更改其纹理?

Swift 放置SKNode后是否更改其纹理?,swift,sprite-kit,sprite,sknode,Swift,Sprite Kit,Sprite,Sknode,注:我已经看了之前关于这个主题的SO问题。我试过所建议的方法,但没有用。更改节点纹理的建议已经实现,由于我有一个“纹理”变量用于我想要更改的SKNode,我认为没有理由转换为SKSpritode(正如另一篇文章中建议的那样) 在我的游戏中,我需要在城市被捕获时改变它们的纹理。捕捉确实有效,但纹理更改无效 以下是我为改变城市纹理而编写的代码: if attackedCity?.team == "Red"{ attackedCity?.texture = textureRed

注:我已经看了之前关于这个主题的SO问题。我试过所建议的方法,但没有用。更改节点纹理的建议已经实现,由于我有一个“纹理”变量用于我想要更改的SKNode,我认为没有理由转换为SKSpritode(正如另一篇文章中建议的那样)

在我的游戏中,我需要在城市被捕获时改变它们的纹理。捕捉确实有效,但纹理更改无效

以下是我为改变城市纹理而编写的代码:

if attackedCity?.team == "Red"{
            attackedCity?.texture = textureRedCity
            print("City now Red")
        } else if attackedCity?.team == "Blue"{
            attackedCity?.texture = textureBlueCity
            print("City now Blue")
        }
城市确实产生了捕获它们的团队的单位,但城市的结构没有改变。看起来一个蓝色的城市正在生产红色的单位


“城市”类(attackedCity只是其中的一部分,它是从一系列城市中选择一个城市的测试者)是“改进”的一个子类,它本身就是一个“SKNode”。

提前定义纹理:

let redTexture = SKTexture(imageNamed: "redTexture")
let blueTexture = SKTexture(imageNamed: "blueTexture")
然后在需要时设置纹理更改的动画:

let changeTexture = SKAction.animate(with: [redTexture], timePerFrame: 0.25, resize: true, restore: false)
attackCity.run(changeTexture)

创建一个与旧城市具有相同统计信息的新城市

例如

我假设这是可行的,因为城市是SKNodes,上面有SKSpritodes,它们在加载时被设置为纹理,所以它们是不可更改的。因此,修复方法是重新加载SKSpriteNodes,这可以通过删除旧城市并将其替换为在城市阵列中具有相同标签和位置的新城市来完成

让newTexture=SKTexture()
let action=SKAction.setTexture(newTexture)
spriteNode.run(操作)

纹理在别处定义。但是,没有动画就没有永久性的方法来改变纹理吗?由于我想将纹理保留在纹理中,所以我也对其进行了更改,我认为这将适用于动画?使用restore:false,新纹理将保留。找到了另一种修复方法(因为我不知道如何使SKAction影响受攻击的城市)您可以使用
.run
或。
sequence
直接在对象上调用它。看编辑的回答我应该测试一下吗?因为我已经找到了另一个可行的解决方案。
let RedCity = City(texture: textureRedCity, tag: (attackedCity?.tag)!, health: 1, production: 1, workDone: 0)
RedCity.position = (attackedCity?.position)!
RedCity.team = "Red"
improvementsLayer.addChild(RedCity)
cityList[attackedListPos] = RedCity