2017-02-03 705 views
2

나는 인데 120px x 120px입니다. 스프라이트의 기본 텍스처는 반지름이 60px 인 원입니다. I 함께 스프라이트 애니메이션 싶습니다SKSpriteNode 애니메이션의 각 프레임이 가운데에 맞춰지지 않은 애니메이션

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

문제는 애니메이션의 일부로서 각 텍스처 크기 미만 120 픽셀 X 120 픽셀이고,이다 따라서 I는이를 수행하는 스프라이트 기준점을 설정하면

CGPoint(x: 0.5, y: 0.5) 

애니메이션 프레임은 스프라이트의 중앙에 배치됩니다. 이는 내가 올바른 애니메이션이 아닙니다. 나는 다음과 같이 애니메이션 싶습니다 :

enter image description here

을 내가 120 픽셀 X 120 픽셀로 스프라이트 아틀라스의 모든 애니메이션 텍스처를 추가해야한다는 것을 의미한다 내가 수정입니까? 그렇다면 빈 픽셀로 낭비되는 아틀라스 공간이 생깁니다. 이것을 성취 할 수있는 더 좋은 방법이 있습니까? 애니메이션에서 각 텍스처 프레임의 중심점을 지정 하시겠습니까?

미리 감사드립니다.

답변

0

또한 시도 할 수 있어야한다 :

enter image description here

resize = true 사실 경우, 스프라이트는 각각의 새로운 질감에 맞게 크기가 조절에주의를 집중

. false 인 경우 스프라이트 크기는 일정한 크기로 유지됩니다.

자세한 공식 정보가 필요하면 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

크기 조정의 문제가 아니라면 애니메이션을 만드는 것이 잘못되었습니다. 투명한 환경에 삽입 한 후 간단한 이미지가 오른쪽 또는 왼쪽에 놓여 있는지를 어떻게 예상 할 수 있습니까? 두 가지 문제가 있습니다. 하나는 위쪽/아래쪽의 trasparent 영역에 의해 발생하는 다른 크기입니다. 귀하의 스프라이트 (resize = true로 해결됨), 다른 하나는 당신이 원하는쪽으로 움직여야한다는 것입니다. 그렇지 않으면, transp에 간단한 참조 픽셀을 넣어 애니메이션을 다시 만들어야합니다. 실제 폭 치수를 유지하는 영역 (또는 배경색 변경) –

+0

문제의 크기가 조정되지 않았습니다. 문제는 실제로 애니메이션의 각 텍스처 프레임을 개별적으로 배치하거나 각 애니메이션 텍스처 프레임마다 다른 앵커 포인트를 설정하는 방법이 있습니까? 예 : frame01 앵커 포인트 (0.0, 0.5), 두 번째 프레임 앵커 포인트 (0.25, 0.5), 세 번째 프레임 앵커 포인트 (0.5,0.5) ... 등. 왜냐하면 아틀라스에 빈 픽셀이있는 각 텍스처가있는 경우 빈 픽셀을 유지하는 데 메모리가 낭비되기 때문입니다. – plawres