确定。我有一个非常奇怪的问题与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
})
它应该回到正常纹理(这是一个空白图像),但它不会。回到这一点的唯一方法是,如果我没有设置纹理开始,我需要做。我怎样才能恢复?
答案 0 :(得分:0)
建议的解决方案
尝试将精灵设置为地图册中的最后一个纹理,如下所示: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