Ios SpriteKit中的不工作转换

Ios SpriteKit中的不工作转换,ios,iphone,ipad,sprite-kit,Ios,Iphone,Ipad,Sprite Kit,我有一个场景正在调用下一个场景,使用如下转换: SKTransition *transition = [SKTransition revealWithDirection:SKTransitionDirectionDown duration:0.5]; SKView *skView = (SKView *)self.view; SKScene * scene = [[GameOverScene alloc] initWithSize:self.size]; scene.scal

我有一个场景正在调用下一个场景,使用如下转换:

  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
的元素(按钮、图像等)添加到其
init
方法中

问题是看不到这种转变。一个场景立即切换到另一个场景

我猜在下一个场景有机会构建其元素之前会发生转换。 我试图将下一个场景的创建移动到
didMoveToView
,但没有成功

出于测试目的,我尝试将
presentScene
行延迟2秒以上。当我这样做时,我几乎看不到过渡的结束帧


我该怎么做?构建下一个场景并进行有效转换的正确方法是什么。

我在我的应用程序中编写了完全相同的代码,在场景上显示游戏,只有一个细微的差异。我的代码如下:

- (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
中设置了节点,同样没有问题。一切正常


我看不出这一行可能是问题根源的原因,但您可能希望尝试对其进行注释,看看是否有帮助。但是,您的代码看起来正常,因此问题的根源可能在其他地方。

如果新场景的资源特别多,即需要大量纹理加载,则会延迟任何帧渲染。如果纹理加载的时间长于过渡时间,则会错过所有加载,因为将显示的第一帧已在过渡完成后渲染。 我也遇到了这种情况,尽管我能够更好地确定根本原因,因为我有一个2秒的转换,其中只显示了最后0.5秒

如何解决这个问题?预加载你的纹理。看

我应该强调一下
SKSprite
SKTexture
和您的“image.png”之间的区别。
SKSprite
根据其
纹理
属性(或
背景
颜色)和
大小
绘制自身。可以对多个精灵使用一个纹理。反过来,图像文件(“image.png”)可以提供多个纹理对象

重要提示:您希望使用传递给上述方法的SKTexture对象数组中的纹理,以实际受益于纹理加载。这将需要某种形式的纹理管理


如果您的问题确实与纹理相关,请告诉我您是否需要我扩展纹理管理。相关的帖子(可能有点枯燥)可以在这里找到:。

不为我工作。我认为问题在于,传入的场景需要一点时间来加载所有元素(至少10个按钮+背景)。这似乎是一个spritekit错误。是否仍然没有修复此问题?我还没弄明白,我的游戏已经有这个问题好几个月了。
+ (void)preloadTextures:(NSArray *)textures withCompletionHandler:(void (^)(void))completionHandler