【问题标题】:Spritekit wont show presented sceneSpritekit 不会显示呈现的场景
【发布时间】:2016-03-27 12:09:18
【问题描述】:

我遇到了问题。当我在 spritekit 中呈现一个新场景(带有目标 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];

【问题讨论】:

  • 您确定要过渡到同一个场景吗?您目前从GameScene - > GameScene 出发。
  • 不,这只是为了测试,你会如何处理不同的场景:)?我之前试过了
  • 查看我的答案(我已经进行了编辑)...

标签: ios objective-c xcode sprite-kit skscene


【解决方案1】:

您最初从 .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 方法提供的代码。

【讨论】:

  • 好的,但是当我尝试在 GameViewController 内部触摸开始执行此操作时,它只会给我错误提示“'UIView' 没有可见的@interface 声明选择器'presentScene:transition:'”跨度>
  • 将编辑我的答案,向您展示应该如何在场景之间转换。
  • 感谢您的回复!我现在就试试这个。
  • 你先生是男人!我不敢相信我自己没有弄清楚这一点!非常感谢!希望我能支持你的答案..
  • @BCAAStian 没问题 :) 一旦获得 enoguh 声望,您就可以随时回来投票。同时,如果它解决了您的问题,您可以将其标记为已接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多