SkSpritenode нормальная текстура не восстанавливается даже при восстановлении на?

Хорошо. У меня очень странная проблема с SKTextures и анимацией сквозного - я создал подобный узел спрайта и установил нормальную текстуру для последнего изображения в массиве sktextures, через которые я в конечном итоге оживлю. Текстура (не нормальная текстура) устанавливается на первое изображение в массиве.

theSprite = SKSpriteNode()
        theSprite.texture = atlas[0]
        theSprite.normalTexture = atlas[atlas.count-1]
        theSprite.size = CGSize(width: 500, height: 1491)
        theSprite.position = CGPoint(x: basePos.x+1, y: basePos.y+2)
        superScene.addChild(theSprite)

при щелчке он запускает эту функцию, и, как я прочитал здесь https://developer.apple.com/reference/spritekit/skaction/1417810-animate я установил значение TRUE, поэтому он ДОЛЖЕН заканчиваться на последнем кадре массива:

 let anim = SKAction.animate(with: atlas, timePerFrame: animSpeed, resize: false, restore: true)
            theSprite.run(anim, completion: {() -> Void in

            })

Он должен вернуться к нормальной текстуре (это пустое изображение), но это не так. Единственный способ вернуться к этому - если я не установлю текстуру для начала, что мне нужно сделать. Как я могу сделать это восстановить?

1 ответ

Решение

Предлагаемые решения

Попробуйте установить свой спрайт на последнюю текстуру в атласе следующим образом: theSprite.texture = atlas[atlas.count-1], Затем запустите ваш код снова. Вы должны увидеть, что он восстанавливает atlas[atlas.count-1],

Если ваша анимация останавливается на текстуре, отличной от вашей последней текстуры атласа, то вы можете попробовать это. Задавать theSprite.texture = atlas[atlas.count-1] в блоке завершения вашей анимации. Вы бы также установить restore в false в этом случае. Это оживит ваш спрайт, а затем установит окончательную текстуру на то, что вы хотите, в этом случае она будет установлена ​​на последнюю текстуру атласа.

объяснение

Restore вернет ваш спрайт обратно к той текстуре, которая была до начала анимации. Так что в вашем случае с вашим текущим кодом, анимация должна заканчиваться текстурой atlas[0], Он не должен заканчиваться последним кадром массива, как вы указали.

Согласно справочнику разработчика Apple, если restore является true:

Когда действие завершается, текстура спрайта восстанавливается до той текстуры, которая была до завершения действия. https://developer.apple.com/reference/spritekit/skaction/1417810-animate

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