2014-02-20 97 views
1

因此,當您使用SpriteKit模板創建項目時。你有你的視圖控制器和你的SKScene。返回查看SKScene的控制器

從我的視圖控制器我開始我的遊戲與默認給出的代碼,並呈現場景。

在我TCAViewcontroller.m

- (IBAction)startGame:(id)sender { 

    NSLog(@"Start Game triggered"); 
    mainPageImage.hidden = 1; 
    // Configure the view. 
    // Configure the view after it has been sized for the correct orientation. 
    SKView *skView = (SKView *)self.view; 
    if (!skView.scene) { 
     skView.showsFPS = YES; 
     skView.showsNodeCount = YES; 

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

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

    } 
} 

當用戶在遊戲中,我想解僱現場,並回到我的視圖控制器我有失去。我似乎無法找到任何與我的搜索返回到原始視圖控制器,只是推到場景的遊戲。但我不想推到另一個場景,只是解散當前場景並返回到我的TCAViewController。請回答使用代碼澄清謝謝

回答

2

你的場景需要提供一個通信線路,以表明已完成。例如,您可以在場景中創建委託協議和相應的屬性。舉個例子:

@protocol TCAMySceneDelegate; 

@interface TCAMyScene : SKScene 

@property (nonatomic, weak> id<TCAMySceneDelegate> delegate; 

@end 

@protocol TCAMySceneDelegate <NSObject> 
- (void)mySceneDidFinish:(TCAMyScene *)gameScene; 
@end 

然後,在你的TCAMyScene

- (void)endTheGame { 
    // Other game-ending code 
    [self.delegate mySceneDidFinish:self]; 
} 

在視圖控制器的.m,爲自己設定的委託場景和實現方法:

- (IBAction)startGame:(id)sender { 
    // Other code 

    TCAMyScene *theScene = [TCAMyScene sceneWithSize:skView.bounds.size]; 
    theScene.scaleMode = SKSceneScaleModeAspectFill; 
    theScene.delegate = self; 

    // Other code 
} 

- (void)mySceneDidFinish:(TCAMyScene *)myScene { 
    // logic for dismissing the view controller 
} 
+0

這似乎不適用於我,mySceneDiDFinish沒有被觸發,第一塊代碼在我的TCAScene.h文件中正確? – 4GetFullOf

+1

當你實例化'TCAMyScene'時,你需要設置委託:'theScene.delegate = self' –

+0

哦,當然。非常感謝你太棒了!這很奇妙。最後一個問題,雖然我檢查了類的引用,並且在調用endTheGame函數時,似乎無法找到場景的某種解除函數來結束它。解僱場景的最佳方式是什麼? – 4GetFullOf

相關問題