Spritekit 不会显示呈现的场景

Spritekit wont show presented scene

我有问题。当我在 spritekit 中呈现一个新场景时(使用 objective c)它只在屏幕上显示带有节点和 fps 计数的灰色。

我在 .sks 文件中对场景进行了动画处理,所以它看起来不应该像这样。 我呈现新场景时的过渡也有效,但它不会显示我在 .sks 文件中设置动画的图像和背景。

这是我如何操作的代码。

//In gameviewcontroller.m

// Creating and configuring the scene.
GameScene *Level1 = [GameScene nodeWithFileNamed:@"GameSceneLevel1"];
Level1.scaleMode = SKSceneScaleModeAspectFill;



 //  GameScene.m inside touchesbegan

 SKTransition *reveal = [SKTransition doorwayWithDuration:4];


        GameScene *Level1 = [GameScene sceneWithSize:self.view.bounds.size];
        Level1.scaleMode = SKSceneScaleModeAspectFill;
        [self.view presentScene:Level1 transition:reveal];

您最初从 .sks 文件中加载了场景,正如您所说,那里有一些动画。稍后,(在 touchesBegan 内)您将通过提供大小(使用 sceneWithSize 静态方法)来创建场景。所以场景不是从存档中加载的。

要解决此问题,请像最初一样在 GameViewController.

中加载场景

编辑:

要在两个场景之间转换,您必须创建两个 .sks 文件。您可以这样命名它们:MenuScene 和 GameScene(默认情况下您已经有了)。请注意,当您创建这些文件时,您不必编写扩展名 (.sks),而只需编写文件名。然后你必须创建相应的 .m.h 文件。所以创建 MenuScene.mMenuScene.hGameScene .m.h 文件默认存在。

MenuScene 应该是 SKScene 的子类(不一定是直接子类)。

然后在你的视图控制器中:

- (void)viewDidLoad
{
    [super viewDidLoad];

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

    GameScene *scene = [GameScene nodeWithFileNamed:@"GameScene"];
    scene.scaleMode = SKSceneScaleModeAspectFill;
    scene.size = skView.bounds.size;

    [skView presentScene:scene];
}

稍后在您的 GameScene 的 touchesBegan 方法中,如果您想转换到 MenuScene,您应该这样做:

MenuScene *nextScene = [MenuScene nodeWithFileNamed:@"MenuScene"];
SKTransition *transition = [SKTransition fadeWithDuration:3];  
[self.view presentScene:nextScene transition:transition];

同样,要在 MenuScene 的 touchesBegan 中转换回 GameScene,请执行以下操作:

GameScene *nextScene = [GameScene nodeWithFileNamed:@"GameScene"];
SKTransition *transition = [SKTransition fadeWithDuration:3];  
[self.view presentScene:nextScene transition:transition];

当然,在每次转换之前,您可以设置场景的缩放模式以匹配旧场景的缩放模式。

从您的代码来看,您似乎正在尝试过渡到同一场景:GameScene -> GameScene。这当然是可能的,但你确定你想要那个吗?

如果是这样,只需使用我为 MenuScene 的 touchesBegan 方法提供的代码即可。