我使用SKAction.animateWithTextures
在Swift中設置SKSpriteNode
的動畫效果,參數restore
設置爲true
。如a different thread中所述,由於紋理圖譜中的圖像比原始節點略大,所以出現第一個問題。現在出現了另一個問題:如果我使用SKSpriteNode.removeAllActions()
中斷了動畫,那麼節點會恢復到原始紋理,但節點的大小不會恢復到原始,導致圖像失真,因爲圖集中的紋理更大。SKSpriteNode - 紋理在中斷animateWithTextures後沒有恢復到原始大小
因此,假設我有我的紋理稱爲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會將它保持居中:-()
動畫後:
(現在她只是看起來胖)
我是不是該用錯誤的方式,或者這是一個錯誤,或者是有辦法解決這個問題?
謝謝!
大衛
感謝您的回答。關鍵是,我不知道什麼時候動畫可能被中斷 - 這是一個事件,可能在「animateWithTextures」動作執行時「隨機」發生,所以我不能像這樣計時。我希望能夠實現的是,如果沒有任何事情發生,動作就會完全執行,但當它被打斷時,精靈會恢復到原始狀態(原始紋理+大小)。同樣,原始紋理被恢復的事實,但不是尺寸,對我來說看起來像一個bug,或者有一些參數我沒有正確設置。 – David
很難理解你的bug,但是你可以用run completion在完成塊中強制它,並且在動畫完成後設置紋理和大小 –