【发布时间】:2016-06-09 18:25:21
【问题描述】:
我在 Swift 中使用SKAction.animateWithTextures 为SKSpriteNode 设置动画,参数restore 设置为true。如a different thread 中所述,出现第一个问题是因为纹理图集中的图像略大于原始节点。现在又出现了一个问题:如果我用SKSpriteNode.removeAllActions()打断动画,那么节点恢复到原来的纹理,但是节点的大小并没有恢复到原来的大小,导致由于图集中的纹理导致图像失真更大。
所以,假设我的纹理(比原始纹理稍大)在一个名为 textures 的数组中,这里有一个 sn-p 应该这样做:
{
// ...
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 保持居中:-( )
动画后:
(现在她看起来很胖)
我是不是用错了方法,或者这是一个错误,还是有办法修复它?
谢谢!
大卫
【问题讨论】:
标签: swift animation sprite-kit skspritenode skaction