即使恢复,SkSpritenode正常纹理也无法恢复?

时间:2017-03-30 22:36:30

标签: swift swift3 sprite-kit sktexture

确定。我有一个非常奇怪的问题与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 个答案:

答案 0 :(得分:0)

建议的解决方案

尝试将精灵设置为地图册中的最后一个纹理,如下所示:theSprite.texture = atlas[atlas.count-1]。然后再次运行您的代码。你应该看到它恢复到atlas[atlas.count-1]

如果你的动画停留在上一个地图集纹理以外的纹理上,那么你可以试试这个。在动画的完成版块中设置theSprite.texture = atlas[atlas.count-1]。在这种情况下,您还可以将restore设置为false。这将动画你的精灵然后将最终纹理设置为你想要的任何东西,在这种情况下它将被设置为最后的地图集纹理。

<强>解释

Restore会将您的精灵返回到动画开始之前的纹理。因此,在您使用当前代码的情况下,它应该使用纹理atlas[0]结束动画。它并不意味着像你所说的那样在阵列的最后一帧结束。

根据Apple开发参考,如果restoretrue

  

当动作完成时,精灵的纹理将恢复到   在动作完成之前它有纹理。   https://developer.apple.com/reference/spritekit/skaction/1417810-animate