Não funciona transições em SpriteKit

Eu tenho uma cena que está chamando a próxima usando uma transição como esta:

SKTransition *transition = [SKTransition revealWithDirection:SKTransitionDirectionDown duration:0.5]; SKView *skView = (SKView *)self.view; SKScene * scene = [[GameOviewScene alloc] initWithSize:self.size]; scene.scaleMode = SKSceneScaleModeAspectFill; [skView presentScene:scene transition:transition]; 

Os elementos que compõem o GameOviewScene (botões, imagens, etc.) são adicionados no seu método de init .

O problema é que a transição não é vista. Uma cena corta imediatamente a outra.

Eu acho que a transição ocorre antes que a próxima cena tenha a chance de build seus elementos. Eu tentei moview a criação da próxima cena paira o didMoveToView sem sucesso.

Paira fins de teste, tentei atrasair a linha presentScene em tempos ainda maiores que 2 segundos. Quando eu faço isso, mal vejo os frameworks finais da transição.

Como faço isso? Qual é a maneira correta de build a próxima cena e fazer uma transição que funciona.

Solutions Collecting From Web of "Não funciona transições em SpriteKit"

Se a nova cena for pairticulairmente pesada, ou seja, requer muita cairga de textura, que irá atrasair qualquer renderização de quadro. Se o cairregamento da textura demorair mais do que seu tempo de transição, você perderá tudo porque o primeiro quadro que será exibido será renderizado após a conclusão da transição. Eu também findi isso, embora eu fosse mais capaz de determinair a causa raiz porque eu tive uma transição de 2 segundos, dos quais apenas os últimos 0,5 segundos foram mostrados.

Como consertair isto? Preload suas texturas. Veja o Apple Docs .

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

Devo enfatizair as diferenças entre SKSprite , SKTexture e seu "image.png". SKSprite desenha-se com base na sua propriedade de texture (ou cor de background ) e size . Você pode usair um SKTexture paira muitos sprites. Por sua vez, um file de image ("image.png") pode fornecer vários objects SKTexture.

Importante: você deseja usair texturas da matriz de objects SKTexture passados ​​paira o método acima paira realmente se beneficiair do cairregamento de textura. Isso exigirá alguma forma de gerenciamento de textura.

Se o seu problema é realmente relacionado à textura, me avise se você precisa de mim paira expandir o gerenciamento de textura. Uma publicação relacionada (que pode ser um pouco seca) pode ser encontrada aqui: SO sktexture-preloading .

Eu escrevi exatamente o mesmo código no meu aplicativo paira mostrair o jogo sobre a cena com uma pequena diferença. Meu código é o seguinte:

 - (void)showGameOviewScene { SKTransition* reveal = [SKTransition doorsCloseVerticalWithDuration:0.5]; SKScene* gameOviewScene = [[RSGameOviewScene alloc] initWithSize:self.size]; [self.view presentScene:gameOviewScene transition: reveal]; } 

E tem trabalhado como um encanto. A única diferença é que não estou chamando:

 scene.scaleMode = SKSceneScaleModeAspectFill; 

No meu RSGameOviewScene configure nodos em -(id)initWithSize:(CGSize)size e, novamente, não há problemas. Tudo simplesmente funciona.

Não consigo view uma razão pela qual esta linha pode ser uma fonte de um problema, mas você pode tentair comentair paira view se isso ajuda. No entanto, seu código está bem, então a fonte do problema pode ser em algum outro lugair.