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 参考,如果 restore
是 true
:
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
好的。我在使用 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 参考,如果 restore
是 true
:
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