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

SkSpritenode normal texture not restoring even with restore on?

好的。我在使用 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

            })

它应该回到正常纹理(这是一个空白图像),但它没有。回到这里的唯一方法是,如果我不设置纹理开始,我需要这样做。我怎样才能让它恢复?

建议的解决方案

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

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

说明

恢复将 return 您的精灵恢复到动画开始前的纹理。因此,对于您当前的代码,它应该以纹理 atlas[0] 结束动画。它并不像您所说的那样在数组的最后一帧结束。

根据 Apple dev 参考,如果 restoretrue

When the action completes, the sprite’s texture is restored to the texture it had before the action completed. https://developer.apple.com/reference/spritekit/skaction/1417810-animate