2014-06-07 71 views
1

我正在尝试使用addSubview为我的游戏实现一个暂停菜单。但是,当我触摸暂停按钮时,视图将在前一场景中显示子视图 - DTStartMenu场景,而不是实际的游戏场景。 这里是ViewController.m代码:SpriteKit添加子视图

-(void)viewDidLayoutSubviews{ 
    [super viewDidLoad]; 
    SKView * skView = (SKView *)self.view; 
    skView.showsFPS = YES; 
    skView.showsNodeCount = YES; 

    // Create and configure the scene. 
    SKScene * scene = [DTStartMenu sceneWithSize:skView.bounds.size]; 
    scene.scaleMode = SKSceneScaleModeAspectFill; 

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

代码在StartMenu.m

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    /* Called when a touch begins */ 
    SKView * skView = (SKView *)self.view; 
    SKScene *gameScene = [DTGame sceneWithSize:skView.bounds.size]; 
    gameScene.scaleMode = SKSceneScaleModeAspectFill; 

    // [self.view presentScene:gameScene transition:[SKTransition fadeWithDuration:1]]; 
    [self.view presentScene:gameScene]; 
} 

中的代码DTGame.m

-(void) didMoveToView:(SKView *)view { 

    skview = (SKView*)self.view; 

} 
-(void)pauseGame{ 
    CGRect rect = CGRectMake(90, 40, 300, 200); 
    pauseMenu = [[DTPauseMenu alloc] initWithFrame:rect]; 

    [skview addSubview:pauseMenu]; 
} 

回答

0

常见的问题。您不检查场景是否已经在视图中设置。试试这个:

-(void)viewWillLayoutSubviews 
{ 
    [super viewWillLayoutSubviews]; 

    SKView * skView = (SKView *)self.view; 
    if (skView.scene == nil) 
    { 
     // Setup and present the scene here.... 
     [skView presentScene:scene]; 
    } 
} 

注意,我改变了它从viewDid ..到.. viewWill并调用正确的超级方法(您的实现称为viewDidLoad中)。

+0

有道理。工作。谢谢 ! – mihnea2kx