【发布时间】:2011-05-30 00:30:16
【问题描述】:
如果按下设备上的主页按钮,我将如何结束比赛/断开对面玩家的连接和/或移除比赛制作器标准界面 (GameKit)?我在屏幕上还有一个“主菜单”按钮,如果按下它,我想结束比赛/断开对方玩家的连接。我正在使用 GameKit 来查找和开始比赛。
我是多人游戏新手,因此感谢您的帮助。
-(void) match:(GKMatch*)match player:(NSString*)playerID didChangeState:(GKPlayerConnectionState)state
{
switch (state)
{
case GKPlayerStateConnected:
[delegate onPlayerConnected:playerID];
break;
case GKPlayerStateDisconnected:
CCLOG(@"Disconnected");
[delegate onPlayerDisconnected:playerID];
break;
}
if (matchStarted == NO && match.expectedPlayerCount == 0)
{
matchStarted = YES;
[delegate onStartMatch];
}
}
-(void) disconnectCurrentMatch
{
CCLOG(@"Quit Match");
[currentMatch disconnect];
currentMatch.delegate = nil;
[currentMatch release];
currentMatch = nil;
}
这就是我用来断开玩家连接的全部内容。然后当玩家按下“主菜单”按钮时,这就是代码。
-(void)Menu: (id) sender
{
didQuit = YES;
if (isSingle == YES)
{
GameKitHelper* gkHelper = [GameKitHelper sharedGameKitHelper];
[gkHelper disconnectCurrentMatch];
gkHelper.delegate = nil;
}
[[CCDirector sharedDirector] replaceScene: [MainMenu scene]];
CCLOG(@"Return Main Menu");
}
它将场景替换为主菜单,但不会将状态更改为断开连接。
【问题讨论】:
-
您是否在 (isSingle == YES) 代码上放置了断点以确保正在执行逻辑?
-
如果你的意思是“break;”我不能因为它不在循环或开关中,但我确实添加了一个“CCLOG”来检查,是的,它被调用了。我还在“disconnectCurrentMatch”中添加了另一个检查,当我按下游戏中的主菜单按钮时会调用它。
-
hmm..你怎么知道它没有断开连接?当你改变场景时它会自动断开连接?没有?
-
不,我的意思是 Xcode 断点——在该点停止执行并检查发生了什么。但是,如果您确定 isSingle == YES 那就没问题了。这就是我想确认的。这个方法有什么:[delegate onPlayerDisconnected:playerID];
-
只是 "CCLOG(@"onPlayerDisconnected: %@", playerID);"告诉哪个玩家已断开连接。我发现除非我点击主菜单按钮然后返回开始另一场比赛,否则状态不会改变。然后调用“onPlayerDisconnected”并再次调用“onPlayerConnected”。我也在使用模拟器和我的设备来测试多人游戏。
标签: cocoa-touch ios cocos2d-iphone gamekit