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