不能在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]; 

构成GameOverScene (button,图像等)的元素被添加到其init方法中。

问题是没有看到过渡。 一个场景立即切换到另一个场景。

我想这个过渡发生在下一个场景有机会构build它的元素之前。 我试图将下一个场景的创build移动到didMoveToView而没有成功。

为了testing的目的,我试图延迟presentScene线的时间甚至大于2秒。 当我这样做时,我几乎看不到转换的结束帧。

我怎么做? build立下一个场景和做一个有效的转换的正确方法是什么?

如果新的场景是特别重的资源,即需要大量的纹理加载,这将延迟任何帧渲染。 如果纹理加载花费的时间超过了你的转换时间,你将会错过所有这些,因为在转换完成之后,第一帧将被显示。 我也遇到了这个问题,虽然我能更好地确定根本原因,因为我有一个2秒的过渡,只显示最后0.5秒。

如何解决这个问题? 预加载你的纹理。 请参阅Apple文档 。

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

我应该强调SKSpriteSKTexture和你的“image.png”之间的区别。 SKSprite根据其texture属性(或background颜色)和size绘制自己。 你可以为许多精灵使用一个SKTexture。 反过来,一个图像文件(“image.png”)可以提供多个SKTexture对象。

重要说明:您想使用传递给上述方法的SKTexture对象数组中的纹理,从纹理加载中获益。 这需要某种forms的纹理pipe理。

如果您的问题确实与纹理有关,请告诉我是否需要我扩展纹理pipe理。 一个相关的post(可能有点干)可以在这里find: SO sktexture预加载 。

我在我的应用程序中编写了完全相同的代码,以便在场景中显示一个小小的区别。 我的代码如下:

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

它一直像魅力一样工作。 唯一的区别是我不打电话:

 scene.scaleMode = SKSceneScaleModeAspectFill; 

在我的RSGameOverScene我设置了-(id)initWithSize:(CGSize)size节点,并且再次没有问题。 一切正常。

我不明白为什么这行可能是问题的根源,但你可能想尝试评论,看看是否有帮助。 但是,你的代码看起来不错,所以问题的根源可以在别的地方。