Проблема с настройкой цвета SKTileMapNode - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть собственный класс, который содержит 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 Ответ

0 голосов
/ 01 декабря 2018

Я так и не нашел хорошего ответа, но нашел обходной путь.Найдите и удалите старый узел, воссоздайте новый узел в коде, перекрасьте этот новый узел и добавьте этот новый узел в сцену.

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

...