【问题标题】:The incoming scene allocates before the current scene can pass data传入场景在当前场景可以传递数据之前分配
【发布时间】:2013-12-18 23:50:25
【问题描述】:

我正在尝试在两个场景之间传递数据(分数)。但是,我的第二个场景在第一个场景可以传递数据之前进行分配。不知道为什么。我的代码:

MainScreen.m

-(void)gameOver
{

     self.view.scene.userData = [[NSMutableDictionary alloc]init];
     [self.view.scene.userData setObject:self.score forKey:@"score"];

     SVGGameOverScreen *gameOverScreen = [[SVGGameOverScreen alloc]initWithSize:self.size];
     gameOverScreen.view.scene.userData = [[NSMutableDictionary alloc]init];
     [gameOverScreen.userData setObject:[self.view.scene.userData objectForKey:@"score"] forKey:@"score"];

     NSLog(@"Value of score (FIRST SCREEN): %d", self.score.intValue);
     NSLog(@"Value of object for score key (FIRST SCREEN) %@", [self.userData objectForKey:@"score"]);

     [self.backgroundMusicPlayer stop];

     //Transition to new view
     SKTransition *transition = [SKTransition pushWithDirection:SKTransitionDirectionUp duration:1.0];
     transition.pausesOutgoingScene = YES;
     [self.view presentScene:gameOverScreen transition:transition];
}

GameOverScreen.m

in init method
...
 self.score = [[NSNumber alloc]init];
        self.score = [self.userData objectForKey:@"score"];
        NSLog(@"Value of object for score key (SECOND SCREEN) %@", [self.userData objectForKey:@"score"]);

调用gameOver时输出如下:

2013-12-18 15:47:48.646 [] Value of object for score key (SECOND SCREEN) (null)
2013-12-18 15:47:48.700 [] Value of score (FIRST SCREEN): 26
2013-12-18 15:47:48.700 [] Value of object for score key (FIRST SCREEN) 26

【问题讨论】:

    标签: iphone objective-c sprite-kit


    【解决方案1】:

    如果你打电话

    [SVGGameOverScreen alloc]initWithSize:self.size];
    

    并且不要在里面设置userData,当然要等到方法返回之后才会设置。要么编写一个新方法来重现设置 userData 后需要执行的任何逻辑,然后使用类似这样的新方法将其传递到游戏画面

    initWithSize: (CGSize) size userData: (NSMutableDictionary*) userData
    

    并将其设置在内部,或者(可能更好)为属性创建一个自定义设置器并将逻辑放在那里。

    顺便说一句,您为什么要为 score 创建一个 NSNumber 以将其设置为等于值 userData 的“score”键?

    【讨论】:

    • 您对 NSNumber 的担忧有什么建议?
    • 完全摆脱那条线。初始化一个新的 NSNumber 只是为了在下一行设置分数等于其他值是没有意义的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多