2011-11-19 69 views
1

我可能在想這個問題,但我一直在困擾它,所以我想我會伸出一些建議/幫助。使用GameKitHelper委託問題 - cocos2d

我使用的是GameKitHelper(http://www.learn-cocos2d.com/tag/gamekithelper/),到目前爲止,它非常有幫助。所以,我在我的「MainMenu的」與實現的協議初始化的幫手,等:

@interface MainMenu : CCLayer <GameKitHelperProtocol> { 
    ... 
    GameKitHelper *gkHelper; 
} 

在主菜單中的代碼,我有這樣的:

gkHelper = [GameKitHelper sharedGameKitHelper]; 
    gkHelper.delegate = self; 
    [gkHelper authenticateLocalPlayer]; 

似乎相當兩岸前進。事實上,它的工作原理與我預期的完全相同。我有它想要在那裏的方法(即使大多數沒有與它們相關的代碼(但?))。我的問題是我真的想開始我的比賽。所以,我使用的onMatchFound()開始遊戲,基本的工作原理:

-(void) onMatchFound:(GKMatch*)match 
{  
    [[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:1.2f scene: [[MultiplayerLoading initWithData:Multiplayer withMultiplayerType:gameTypeToPlay andInitiator:false] scene]]]; 

} 

我的問題是,當我試圖玩遊戲,在MainMenu的不是遊戲,接收刪除方法火災上課,所以事情沒有被正確計算。 當onMatchFound觸發時,是否有辦法將控件從主菜單傳遞到遊戲圖層?

希望這給了足夠的信息,如果不是,請告訴我。

謝謝大家!

回答

0

有兩種方法可以使這項工作。一種方法是將全局Singleton類作爲GameKitHelper委託。然後你可以通過這個Singleton類中繼消息。

,還是隻分配了新的場景作爲GameKitHelper代表:

-(void) onMatchFound:(GKMatch*)match 
{ 
    CCScene* newScene = [MyNewScene scene]; 
    [GameKitHelper sharedGameKitHelper].delegate = newScene; 
    [[CCDirector sharedDirector] replaceScene:newScene]; 
} 

而且,似乎有什麼問題你如何創建新的場景:

[[MultiplayerLoading initWithData:Multiplayer 
       withMultiplayerType:gameTypeToPlay 
        andInitiator:false] scene]; 

看樣子您首先調用init方法,然後調用分配實例的類方法scene(請參閱場景實現)。它看起來對我來說,它應該是:

[[[MultiplayerLoading alloc] initWithData:Multiplayer 
         withMultiplayerType:gameTypeToPlay 
          andInitiator:false] autorelease]; 

順便說一句,在Cocoa Coding Guidelines建議不要在「鏈接」方法的參數與「和」,「與」不止一次也挺奇怪的關鍵字和使用。清理它應該是:

[[[MultiplayerLoading alloc] initWithData:Multiplayer 
          multiplayerType:gameTypeToPlay 
           initiator:false] autorelease]; 

對不起,因爲被挑剔。 :)

+0

我很欣賞人們用我的代碼挑剔!我會嘗試這些更改並報告回來!謝謝! – SlackerCoder

+0

好,所以我改變了你的說法,但現在當接收到類(MultiplayerLoading)中的數據時,它崩潰了:'NSInvalidArgumentException',原因:'+ [MultiplayerLoading onReceivedData:fromPlayer:]:無法識別的選擇器發送到類 它嘗試在開始播放前接收數據包,但在此時崩潰......想法? – SlackerCoder

+0

看來你需要實現錯誤信息告訴你的@selector。 – LearnCocos2D

0

難道這是因爲你的MainMenu被設置爲GameKitHelper中的代表嗎?我會嘗試設置代表onMatchFound內的遊戲。試試看。

+0

是的,但我並沒有真的找到一種方法,沒有主菜單作爲代表。當比賽結束後,比賽發起人全部開火併且工作正常,但是如果獲得邀請的人不在遊戲中,則代表不會附加,所以它們基本上是無用的。當你得到邀請時,它會帶你進入遊戲,但是如果代理不在主菜單上,它就在那裏,因爲它沒有onMatchFound的東西來觸發。 – SlackerCoder