2017-02-03 69 views
2

我有一個SKSpriteNode,它是120px x 120px。 精靈的默認紋理只是一個半徑爲60px的圓。 我想動畫與精靈:SKSpriteNode動畫,其中動畫中的每個幀都不居中

SKAction.animate(with:timePerFrame:resize:restore:) 

的問題是,每一個紋理作爲動畫的部分小於120像素X 120像素的大小,因此如果我這樣做,並設置精靈錨點

CGPoint(x: 0.5, y: 0.5) 

動畫幀將位於精靈的中間,這不是我所追求的正確動畫。我想動畫如下:

enter image description here

這意味着,我必須添加所有的動畫紋理精靈地圖集爲120像素X 120像素,我是正確的?如果是這樣,這將導致空像素浪費地圖集空間。有沒有更好的方法來實現這一目標?即指定動畫中每個紋理幀的中心點?

在此先感謝。

回答

0

你應該能夠還嘗試:

enter image description here

把你的注意力,以resize = true 如果,精靈被調整,以匹配每一個新的質感。如果,精靈的大小保持不變。

如果您需要更多的官方細節,請看看here


關於您的請求評論下面你可以重新創建SKAction.animate例如提出延期是這樣的:

extension SKAction 
{ 
    static func animate(withMyTextures textures:[texture:SKTexture], timePerFrame:TimeInterval ,resize:Bool, restore:Bool) ->SKAction { 

     var originalTexture : SKTexture! 
     let duration = timePerFrame * Double(textures.count) 

     return SKAction.customAction(withDuration: duration) 
     { 
      node,elapsedTime in 
      guard let spriteNode = node as? SKSpriteNode 
      else 
      { 
        assert(false,"animateWithMyTextures only works on members of SKSpriteNode") 
        return 
      } 
      let index = Int((elapsedTime/CGFloat(duration)) * CGFloat(textures.count)) 
      //If we havent assigned this yet, lets assign it now 
      if originalTexture == nil 
      { 
       originalTexture = spriteNode.texture 
      } 
      if(index < textures.count) 
      { 
       spriteNode.texture = textures[index].texture 
      } 
      else if(restore) 
      { 
       spriteNode.texture = originalTexture 
      } 
      if(resize) 
      { 
       spriteNode.size = spriteNode.texture!.size() 
      } 
     } 
    } 
} 
+0

這不是調整的問題。這是將動畫的每個幀定位在正確位置的問題。如果我設置resize = true,則精靈將會簡單地調整每個動畫幀的大小。請看一下上圖中的第二行。那就是在動畫期間應該如何定位每個幀。 – plawres

+0

如果這不是調整大小的問題,那麼製作動畫就是錯誤的。您如何期望簡單的圖像根據您的口味定位在右側或左側,然後您已插入透明環境中?這裏有兩個問題:一個是由頂部/底部的透明區域引起的不同尺寸你的精靈(通過resize = true解決),另一個是你應該把你的棋子移動到你想要的一側,否則你應該重新制作一個簡單的參考像素到動畫。區域以保持真實的寬度尺寸(或更改背景顏色) –

+0

問題不在調整大小。真正的問題是,是否有辦法單獨定位動畫的每個紋理幀或者例如爲每個動畫紋理幀設置不同的定位點?例如第一幀定位點(0.0,0.5),第二幀定位點(0.25,0.5),第三幀定位點(0.5,0.5)等等。因爲如果我在地圖集中包含空像素的每個紋理,那麼保留空像素會浪費內存。 – plawres