SpriteKit 中未呈现场景

Posted

技术标签:

【中文标题】SpriteKit 中未呈现场景【英文标题】:Scene not being presented in SpriteKit 【发布时间】:2014-01-12 15:57:46 【问题描述】:

我正在使用 SpriteKit 制作游戏。 我正在检查玩家是否在更新方法中死亡,如下所示:

-(void)update:(CFTimeInterval)currentTime

    if (self.player.dead) 
        [self gameOver];
    

gameOver 方法如下:

-(void)gameOver 
    SKView * skView = (SKView *)self.view;
    GameOverScene *gameOver = [GameOverScene sceneWithSize:skView.bounds.size];
    gameOver.scaleMode = SKSceneScaleModeAspectFill;
    [skView presentScene:gameOver transition:[SKTransition doorsOpenHorizontalWithDuration:1.0]];

由于某种原因,GameOver 场景没有被呈现,而是不断调用当前屏幕的更新方法。我做错了什么?

【问题讨论】:

你是否曾将播放器的dead 属性设置为YES? 是的,这是在另一个班级完成的,我在玩家死亡时做了一个 NSLog 来测试它 出于调试目的,在 update 方法的 if 语句中插入一个 NSLog,在 gameOver 方法中插入另一个。是否被调用? 我在两个地方都添加了NSLog,都在调用,但是场景没有变化 【参考方案1】:

我认为问题可能是 self.player.dead 标志在 update 方法中一遍又一遍地评估为 YES , 多次调用 [self gameOver] 并且由于 1 秒的持续时间而从未真正完成过渡;您可以使用断点或日志记录轻松地对此进行测试。在呈现新场景之前,尝试在 -(void)gameOver 方法中调用 self.player.dead = NO

【讨论】:

【参考方案2】:

尝试以下方法,看看是否有效果:

- (void)gameOver 
    SKScene *gameOver = [[GameOverScene alloc] initWithSize:self.size];
    SKTransition *doors = [SKTransition doorsOpenVerticalWithDuration:1.0];
    [self.view presentScene:gameOver transition:doors];

另外,确保从当前场景调用 gameOver。

【讨论】:

以上是关于SpriteKit 中未呈现场景的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SpriteKit 中呈现场景后立即接收触摸事件?

Swift:如何获得Spritekit场景的大小以呈现SKNode全屏?

Spritekit 场景内容被放大

SpriteKit 在转换到新场景时收到有关 UIElements 的错误

在使用 Swift 的 SpriteKit 中的 didBeginContact(日志)中未检测到 contactTestBitMask

SpriteKit:场景中的静态背景与移动的 SKCameraNode