0

我正在使用root viewcontroller来显示几个标签来跟踪分数等,这工作正常。但是,当场景加载时,根视图控制器不会立即响应来自场景的消息。

情况是这样的:UIViewController展示了SKView我在上面初始化MyScene的地方(普通的 SpriteKit 东西)。在 MyScene 中,我立即从 a 加载关卡json-file,其中包含该特定关卡上可能的点数。关卡加载完成后,我尝试将可能的点数发送回我的根视图控制器,以便它可以在标签中显示它。

我尝试myScene.mainViewController = selfviewWillLayoutSubviewson设置属性ViewController,然后只是[self.mainViewController setInitialScore:_bgLayer.maxScore];,但该方法setInitialScore永远不会触发。我也尝试过使用NSNotificationCenter,但这也不起作用。

self.mainViewController但是,每当玩家获得一个点(稍后会发生)时,我都会调用一个方法,并且效果很好。所以问题似乎是 ViewController 没有完成加载或其他什么,所以它没有立即响应。

我怎么能解决这个问题?

编辑 1: 这里有一些代码请求:

视图控制器.m

- (void)viewWillLayoutSubviews {
  [super viewWillLayoutSubviews];

  SKView *skView = (SKView *)self.view;
  if (!skView.scene) {
    skView.showsFPS = YES;
    skView.showsNodeCount = YES;

    // Create and configure the scene.
    MyScene* scene = [MyScene sceneWithSize:skView.bounds.size];
    scene.scaleMode = SKSceneScaleModeAspectFill;
    scene.mainViewController = self;

    // Present the scene.
    [skView presentScene:scene];

    self.numLives = bStartNumLives;
    self.score = 0;
    [self resetLabels];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setInitialRings:) name:@"setInitialRings" object:nil];
  }
}

- (void)setInitialRings:(NSNotification *)notification {
  NSLog(@"Initial rings set");
  NSDictionary *userInfo = [notification userInfo];
  NSInteger rings = [(NSNumber *)[userInfo objectForKey:@"rings"] integerValue];

  self.numRings = rings;

  [self resetLabels];
}

我的场景.m

- (void)createWorld {
  _bgLayer = [self createScenery];
  NSLog(@"world created setting initial rings");
  NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:_bgLayer.numRings] forKey:@"rings"];
  [[NSNotificationCenter defaultCenter] postNotificationName:@"setInitialRings" object:userInfo];

  _worldNode = [SKNode node];
  [_worldNode addChild:_bgLayer];
  [self addChild:_worldNode];

  self.anchorPoint = CGPointMake(0.5, 0.5);
  _worldNode.position = CGPointMake(-_bgLayer.layerSize.width / 2, -_bgLayer.layerSize.height / 2);
}

正如您从这段代码中看到的那样,我正在尝试使用NSNotificationCenter. 我也尝试过[self.mainViewController setInitialRings:_bgLayer.numRings];手动调用(但将setInitialRings-method 更改为采用整数而不是通知)。

4

0 回答 0