2011-11-19 67 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