Проблема с настройкой цвета 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 сможет лучше объяснить, что происходит

Другие вопросы по тегам