注意:我已经查看了之前有关此主题的SO问题。我试过建议的方法无济于事。更改节点纹理的建议已经实现,因为我想要更改的SKNode的“纹理”变量,我认为没有理由转换为SKSpriteNode(如另一篇文章所建议的那样)
在我的游戏中,我需要在拍摄时更改城市的纹理。捕获确实有效,但纹理没有改变。
以下是我为改变城市纹理而编写的代码:
if attackedCity?.team == "Red"{
attackedCity?.texture = textureRedCity
print("City now Red")
} else if attackedCity?.team == "Blue"{
attackedCity?.texture = textureBlueCity
print("City now Blue")
}
城市确实生产了捕获它们的团队单位,但城市的纹理并没有改变。例如。它看起来像一个蓝色的城市正在生产红色单位。
“城市”这个类(攻击城市只是其中的一部分,它是从一系列城市中选择一个城市的测试者)是“改进”的子类,它本身就是一个“SKNode”。
答案 0 :(得分:0)
提前定义纹理:
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)
答案 1 :(得分:0)
使用与旧版相同的统计信息创建newCity。
E.g。
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
我认为这是有效的,因为城市是SKNodes,其上面有SKSpriteNodes,加载后设置为纹理,因此它们是不可更改的。因此,修复是重新加载SKSpriteNodes,这可以通过删除旧城并将其替换为具有相同标记和位于城市数组中的新城市来实现
答案 2 :(得分:0)
这对我有用:
any(Props.class)