使用GameKitHelper委托问题 - cocos2d

时间:2011-11-19 18:49:23

标签: objective-c cocos2d-iphone

我可能过度思考了这一点,但我已经坚持了一段时间,所以我想我会伸手去寻求一些建议/帮助。

我使用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触发时,有没有办法将控件从主菜单传递到游戏层?

希望这能提供足够的信息,如果没有,请告诉我。

谢谢大家!

2 个答案:

答案 0 :(得分:0)

这可能是因为您的MainMenu被设置为GameKitHelper中的委托吗?我尝试将委托设置为onMatchFound内的游戏。试一试。

答案 1 :(得分: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建议不要使用“和”关键字“链接”方法参数并多次使用“with”也很奇怪。清理它应该是:

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

请原谅我挑剔。 :)