我正在使用SKAction.animateWithTextures
为Swift中的SKSpriteNode
设置动画,参数restore
设置为true
。如a different thread中所述,出现了第一个问题,因为纹理图集中的图像略大于原始节点。现在出现了另一个问题:如果我使用SKSpriteNode.removeAllActions()
中断动画,那么节点将恢复到原始纹理,但节点的大小不会恢复到原始状态,导致图像失真,因为纹理在地图集更大。
所以,假设我的纹理(略大于原始纹理)在一个名为textures
的数组中,这里有一个应该执行此操作的片段:
{
// ...
sprite.runAction(SKAction.animateWithTextures(textures, timePerFrame: 1, resize: true, restore: true))
NSTimer.scheduledTimerWithTimeInterval(3, target: self, selector: #selector(test), userInfo: nil, repeats: false)
// ...
}
func test() {
sprite.removeAllActions()
}
注意:此示例使用计时器仅模拟动画的随机中断。在游戏世界中,动画可能在某个未知时间完成或中断(通常在与另一个精灵发生接触时)。
执行此操作后,精灵将恢复到其原始纹理,但会拉伸以匹配图集中纹理的大小。我已经检查了xScale
属性,但当然是1.0
...这是视觉效果:
动画之前:
动画期间:
(注意图像如何从原始位置移开,因为SK保持居中:-()
动画后:
(现在她看起来很胖)
我是以错误的方式使用它,还是这是一个错误,还是有办法解决它?
谢谢!
大卫
答案 0 :(得分:0)
我认为你是在动画自然循环之前移除它。
尝试添加以下操作:
let actionTexture = SKAction.animateWithTextures(textures, timePerFrame: 0.1, resize: true, restore: true)
sprite.runAction(actionTexture, count:30) // 30 x 0.1 = 3 sec tot animation
//删除计时器(或等待时使用动作)