Я работаю над игрой SpriteKit для macOS (10.14.4) со Swift 4.2, и я хотел бы добавить немного света на сцену.
Игра представляет собой карту тайлов, созданную SKTiled (https://github.com/mfessenden/SKTiled). Проблема в том, что когда я пытаюсь применить эффект освещения к некоторым спрайтам (согласно https://developer.apple.com/documentation/spritekit/sklightnode/lighting_a_sprite_with_light_nodes),, вся игра вылетает, и я не могу понять, почему. Вот (часть) мойcode:
class GameScene: SKScene, SKTilemapDelegate {
var backgroundLayer: SKSpriteNode!
override func didMove(to view: SKView) {
super.didMove(to: view)
backgroundLayer = SKSpriteNode(color: bgColor, size: size)
backgroundLayer.position.x = 0
backgroundLayer.position.y = 0
backgroundLayer.lightingBitMask = 0b0001
camera?.addChild(backgroundLayer)
}
}
И у меня есть SKLightNode внутри моего файла GameScene.sks со свойством Lightning Mask, установленным на 1. Когда я добавляю несколько спрайтов прямо в файл и устанавливаю их маску молнии на 1,эффект молнии виден. Но все, что я получаю, выполняя код, является этой ошибкой: « Поток 1: сигнал SIGABRT » в классе AppDelegate и это к консоли вывода: « validateFunctionArguments: 3469: сбой утверждения`Функция фрагмента (PointLight_FragFunc): отсутствует привязка буфера в индексе 2 для u_light_position [0]. '"
Я заметил, что при удалении строки " backgroundLayer.lightingBitMask = 0b0001", приложение работает нормально ...
Я пытался указать это значение с помощью juste ' 1 ' и ' UInt32 (точно: 1) 'но ни один из них не работает.Я пытался создать и добавить SKLightNode непосредственно из кода, но та же проблема.И это то же самое, если я пытаюсь применить эффект молнии к другим узлам SKSpriteNode.
Я также заметил, что ошибка возникает после выполнения всей функции ' didMove (to:) ', добавляя несколько точек останова, поэтому она даже не падает на строке, вызывающейпроблема.
Так что теперь я действительно беспомощен, и, кажется, невозможно заставить его работать, поэтому я обращаюсь к себе, чтобы помочь мне, спасибо !!:)