我可能过度思考了这一点,但我已经坚持了一段时间,所以我想我会伸手去寻求一些建议/帮助。
我使用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 :(得分: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];
请原谅我挑剔。 :)