2014-03-02 8 views
4

에서 전환을 작동하지 않는 나는이 같은 전환을 사용하여 다음 중 하나를 호출하는 장면이 : 그 init 방법에 추가됩니다 GameOverScene (등 버튼, 이미지를) 구성SpriteKit

SKTransition *transition = [SKTransition revealWithDirection:SKTransitionDirectionDown duration:0.5]; 

    SKView *skView = (SKView *)self.view; 

    SKScene * scene = [[GameOverScene alloc] initWithSize:self.size]; 
    scene.scaleMode = SKSceneScaleModeAspectFill; 
    [skView presentScene:scene transition:transition]; 

요소를 .

문제는 전환이 보이지 않는다는 것입니다. 한 장면은 다른 장면으로 즉시 자릅니다.

전이는 다음 장면이 요소를 만들 수 있기 전에 발생합니다. 다음 장면의 생성을 성공하지 않고 didMoveToView으로 옮기려고했습니다.

테스트 목적으로 나는 presentScene 라인을 2 초보다 더 지연 시키려고했습니다. 내가 그렇게 할 때 전이의 마지막 프레임을 거의 볼 수 없습니다.

어떻게하면됩니까? 다음 장면을 만들고 전환 효과를내는 올바른 방법은 무엇입니까?

답변

0

내 애플 리케이션에 똑같은 코드를 써서 하나의 사소한 차이점을 넘어 게임을 보여 주었다. 내 코드는 다음과 같습니다.

- (void)showGameOverScene 
{ 
    SKTransition* reveal = [SKTransition doorsCloseVerticalWithDuration:0.5]; 

    SKScene* gameOverScene = [[RSGameOverScene alloc] initWithSize:self.size]; 

    [self.view presentScene:gameOverScene transition: reveal]; 
} 

그리고 매력적이었습니다. 내 RSGameOverScene에서

scene.scaleMode = SKSceneScaleModeAspectFill; 

을 내가 -(id)initWithSize:(CGSize)size에 노드를 설정하고, 다시 아무런 문제가 없습니다 : 유일한 차이점은 내가 전화하지 오전입니다. 모든 것이 효과가 있습니다.

이 줄이 문제의 원인이 될 수는 없지만 도움이되는지 의견을 말하려는 경우가 있습니다. 그러나 코드는 괜찮아 보이므로 문제의 원인은 다른 곳에서 발생할 수 있습니다.

+0

나를 위해 작동하지 않습니다. 문제는 들어오는 씬이 모든 요소 (적어도 10 개의 버튼 + 배경)를로드하는 데 약간 걸리는 것입니다. 그것은 spritekit 버그 인 것 같습니다. – SpaceDog

+0

아직 해결되지 않았습니까? 나는 그것을 이해하지 못했고 게임에는 몇 달 동안이 문제가있었습니다. – lespommes

3

새로운 장면이 특정 리소스가 많은 경우, 즉 많은 텍스처로드가 필요한 경우 모든 프레임 렌더링이 지연됩니다. 텍스처 로딩이 트랜지션 타임보다 오래 걸리면, 트랜지션이 끝난 후에 표시 될 첫 번째 프레임이 렌더링 되었기 때문에 모든 것을 놓칠 것입니다. 2 초의 전환이 있었기 때문에 근본 원인을 더 잘 판단 할 수 있었지만 지난 0.5 초만 표시되었습니다.

해결 방법? 텍스처를 미리로드하십시오. Apple Docs을 참조하십시오.

+ (void)preloadTextures:(NSArray *)textures withCompletionHandler:(void (^)(void))completionHandler 

나는 SKSprite, SKTexture하고 "image.png를"사이의 차이점을 강조해야한다. SKSpritetexture 속성 (또는 background 색) 및 size을 기반으로 그립니다. 많은 스프라이트에 하나의 SKTexture를 사용할 수 있습니다. 이미지 파일 (image.png)은 여러 개의 SKTexture 객체를 제공 할 수 있습니다.

중요 : 위의 메서드에 전달 된 SKTexture 개체 배열의 텍스처를 사용하여 실제로 텍스처 로딩의 이점을 활용할 수 있습니다. 이 에 어떤 형태의 텍스처 관리가 필요합니다.

실제로 텍스처와 관련된 문제인 경우 텍스처 관리를 확장해야하는지 알려주세요.관련 게시물 (조금 건조 할 수도 있음)은 SO sktexture-preloading에서 찾을 수 있습니다.