我正在使用root viewcontroller
来显示几个标签来跟踪分数等,这工作正常。但是,当场景加载时,根视图控制器不会立即响应来自场景的消息。
情况是这样的:UIViewController
展示了SKView
我在上面初始化MyScene
的地方(普通的 SpriteKit 东西)。在 MyScene 中,我立即从 a 加载关卡json-file
,其中包含该特定关卡上可能的点数。关卡加载完成后,我尝试将可能的点数发送回我的根视图控制器,以便它可以在标签中显示它。
我尝试myScene.mainViewController = self
从viewWillLayoutSubviews
on设置属性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 更改为采用整数而不是通知)。