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.m
和 MenuScene.h
。 GameScene
.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
方法提供的代码即可。
我有问题。当我在 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.m
和 MenuScene.h
。 GameScene
.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
方法提供的代码即可。