我有一个自定义类,其中包含一个SKTileMapNode(名为“ gmap”)作为成员变量。我想根据用户交互使用.color属性为Node重新着色。我使用以下代码更改颜色。 (根据需要使用不同的UIColors)
self.gmap.color = UIColor(red: 0.4, green: 0.65, blue: 0.125, alpha: 1)
self.gmap.colorBlendFactor = 1.0
当我为自定义类的初始化程序中的节点重新着色时,此方法有效,但在其他任何地方使用时均不起作用。 (该节点仍然可以正确显示,但其颜色不会更改)知道这里出了什么问题吗?初始化后,SKTileMapNode不能重新着色吗?谢谢你的帮助。
编辑:我没有找到答案,但是找到了一种解决方法,方法是删除该节点并添加一个新节点。请参阅下面的我的答案以获取完整说明。
答案 0 :(得分:0)
我从来没有找到一个好的答案,但是找到了解决方法。 查找并删除旧节点,在代码中重新创建一个全新的节点,对该新节点重新着色,然后将该新节点添加到场景中。
if let child = self.childNode(withName: "gmap") as? SKTileMapNode {
//remove old node
child.removeFromParent()
var gmapTwo = SKTileMapNode()
//insert code to re-intialize Node here
//now you can recolor the node without a problem
gmapTwo.color = UIColor(red: 0.55, green: 0.55, blue: 0.925, alpha: 1)
gmapTwo.colorBlendFactor = 1
//(Make sure the new Node has the same name so you can find it again later)
gmapTwo.name = "gmap"
//add node to scene
self.addChild(gmapTwo)
}
(对我来说,使用.copy函数复制节点是无效的,相反,我不得不在代码中手动复制节点)
对不起,我没有真正的答案,但是到目前为止,这是唯一对我有用的解决方案。希望对SpriteKit有更好了解的人可以更好地解释发生了什么