2016-06-09 6 views
0

후 원래 크기로 restore 세트를 복원되지 않습니다. a different thread에 설명 된 것처럼 텍스쳐 아틀라스의 이미지가 원래 노드보다 약간 크기 때문에 첫 번째 문제가 발생합니다. 이제 또 다른 문제가 발생했습니다 : SKSpriteNode.removeAllActions()을 사용하여 애니메이션을 중단하면 노드가 원래 텍스처로 복원되지만 노드의 크기는 원본으로 복원되지 않아 아트라스의 텍스처가 더 크기 때문에 이미지가 왜곡됩니다 .SKSpriteNode - 질감 <code>true</code>에 매개 변수를 사용하여, 내가 스위프트의 <code>SKSpriteNode</code> 애니메이션 <code>SKAction.animateWithTextures</code>을 사용하고 중단 animateWithTextures

{ 
    // ... 
    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() 
} 

참고 :

그래서, 가정 내가 textures라는 배열 (원래보다 약간 큰) 내 텍스처 이곳을해야 코드 조각이다이 예는 타이머가 단지를 에뮬레이트 사용 임의의 애니메이션 중단. 게임 세계에서 알 수없는 시간에 애니메이션이 완료되거나 중단 될 수 있습니다 (일반적으로 다른 스프라이트와 접촉이 발생했을 때).

실행 후 스프라이트는 원래 텍스처로 복원되지만 아틀라스의 텍스처 크기와 일치하도록 늘어납니다. 애니메이션 전에

: 나는 xScale 속성을 확인했지만, 물론 그것은 1.0의 ... 여기에 시각적 인 결과의 애니메이션 동안

Before animation

:

During animation

(SK가 중심을 유지하기 때문에 이미지가 원래 위치에서 어떻게 벗어 났는지 확인하십시오 .--)

애니메이션 후

:

After animation has been cancelled

(지금 그녀가 보이는 지방)

나는이 길을 잘못 사용하고, 또는이 버그, 또는 그것을 해결하는 방법이 있나요?

감사합니다.

데이비드

답변

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 

// 타이머를 제거 (또는 대기와 액션을 사용) 대한 답변을

+0

감사합니다. 중요한 것은 애니메이션이 중단 될 때 미리 알 수 없다는 것입니다.'animateWithTextures' 액션이 수행되는 동안 "무작위로"발생할 수있는 이벤트이기 때문에 시간을 할애 할 수 없습니다. 내가 성취하기를 바라는 것은, 아무 일도 일어나지 않으면 액션이 완전히 수행되지만, 스프 라이트는 인터럽트되면 원래 상태 (원래 텍스처 + 크기)로 되돌아갑니다. 다시 말하지만 원래 텍스처가 복원되었지만 크기 나 종류가 아닌 버그가 나에게 보이거나 일부 매개 변수가 올바르게 설정되지 않았습니다. – David

+0

당신의 버그를 이해하기는 어렵지 만 완료 블록을 가진 runaction에서 강제로 할 수 있으며 애니메이션이 끝나면 텍스처와 크기를 설정하십시오 –