【问题标题】:Scene not being presented in SpriteKitSpriteKit 中未呈现场景
【发布时间】: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,都在调用,但是场景没有变化

标签: ios sprite-kit


【解决方案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。

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多