Проблема с настройкой цвета SKTileMapNode
У меня есть пользовательский класс, который содержит SKTileMapNode (с именем "gmap") в качестве переменной-члена. Я хочу использовать свойство.color, чтобы перекрасить узел в зависимости от взаимодействия с пользователем. Я использую следующий код, чтобы изменить цвет. (используя разные UIColors по мере необходимости)
self.gmap.color = UIColor(red: 0.4, green: 0.65, blue: 0.125, alpha: 1)
self.gmap.colorBlendFactor = 1.0
Этот метод работает хорошо, когда я перекрашиваю узел в инициализаторе моего пользовательского класса, но не работает, когда используется где-либо еще. (узел по-прежнему отображается правильно, но его цвет не меняется) Есть идеи, что здесь не так? Может ли SKTileMapNode не быть перекрашен после его инициализации или что-то? Спасибо за любую помощь.
РЕДАКТИРОВАТЬ: Я не нашел ответа, но я нашел способ, удалив узел и добавив новый. Смотрите мой ответ ниже для полного объяснения.
1 ответ
Я никогда не нашел хорошего ответа, но я нашел работу вокруг. Найдите и удалите старый узел, заново создайте новый узел в коде, перекрасьте этот новый узел и добавьте этот новый узел в сцену.
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 сможет лучше объяснить, что происходит