在cocos2d游戏中集成Gamecenter

10

有没有人知道如何在Cocos2d中集成游戏中心(Game Center)。 请告诉我具体步骤,这样我就可以将其集成到我的游戏中。

3个回答

30

更新:

我创建了自己的 Helper 类,可以与各种应用程序一起使用(包括 Cocos2D 1 和 2+)。https://github.com/alexblunck/ABGameKitHelper


嗨,我建议您使用 Steffen Itterheim 的 GKHelper Class!我已为您上传了 GKHelper.h / GKHelper.m:http://www.cl.ly/7ReW

然后按照以下说明操作:

//0.0 将 GameKit Framework 添加到项目中(如果您不知道如何执行此操作,请询问;))

//0. 在 AppDelegate.m 中将 "[window addSubview: viewController.view];" 更改为: //如果您使用的是 cocos2D 0.99.5 之后的任何版本,请执行此操作:

window.rootViewController = viewController;

//1. 将Gamekithelper.h/.m添加到项目中

//2. 在给定的头文件中包含以下委托:

<GameKitHelperProtocol>

//3. 将代理方法添加到 .m 文件

//4. 将 GameKitHelper 添加到 "Scene" 中:

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

//将分数添加到排行榜:

GameKitHelper *gkHelper = [GameKitHelper sharedGameKitHelper];
[gkHelper submitScore:scoreValue category:@"LeaderboardID"];

//添加成就完成状态:

GameKitHelper *gkHelper = [GameKitHelper sharedGameKitHelper];
[gkHelper reportAchievementWithID:@"AchievementID" percentComplete:100];

这些是在第3步中提到需要添加的委托方法:

#pragma mark GameKitHelper delegate methods
-(void) onLocalPlayerAuthenticationChanged
{
    GKLocalPlayer* localPlayer = [GKLocalPlayer localPlayer];
    CCLOG(@"LocalPlayer isAuthenticated changed to: %@", localPlayer.authenticated ? @"YES" : @"NO");

    if (localPlayer.authenticated)
    {
        GameKitHelper* gkHelper = [GameKitHelper sharedGameKitHelper];
        [gkHelper getLocalPlayerFriends];
        //[gkHelper resetAchievements];
    }   
}
-(void) onFriendListReceived:(NSArray*)friends
{
    CCLOG(@"onFriendListReceived: %@", [friends description]);
    GameKitHelper* gkHelper = [GameKitHelper sharedGameKitHelper];
    [gkHelper getPlayerInfo:friends];
}
-(void) onPlayerInfoReceived:(NSArray*)players
{
    CCLOG(@"onPlayerInfoReceived: %@", [players description]);


}
-(void) onScoresSubmitted:(bool)success
{
    CCLOG(@"onScoresSubmitted: %@", success ? @"YES" : @"NO");
}
-(void) onScoresReceived:(NSArray*)scores
{
    CCLOG(@"onScoresReceived: %@", [scores description]);
    GameKitHelper* gkHelper = [GameKitHelper sharedGameKitHelper];
    [gkHelper showAchievements];
}
-(void) onAchievementReported:(GKAchievement*)achievement
{
    CCLOG(@"onAchievementReported: %@", achievement);
}
-(void) onAchievementsLoaded:(NSDictionary*)achievements
{
    CCLOG(@"onLocalPlayerAchievementsLoaded: %@", [achievements description]);
}
-(void) onResetAchievements:(bool)success
{
    CCLOG(@"onResetAchievements: %@", success ? @"YES" : @"NO");
}
-(void) onLeaderboardViewDismissed
{
    CCLOG(@"onLeaderboardViewDismissed");

    GameKitHelper* gkHelper = [GameKitHelper sharedGameKitHelper];
    [gkHelper retrieveTopTenAllTimeGlobalScores];
}
-(void) onAchievementsViewDismissed
{
    CCLOG(@"onAchievementsViewDismissed");
}
-(void) onReceivedMatchmakingActivity:(NSInteger)activity
{
    CCLOG(@"receivedMatchmakingActivity: %i", activity);
}
-(void) onMatchFound:(GKMatch*)match
{
    CCLOG(@"onMatchFound: %@", match);
}
-(void) onPlayersAddedToMatch:(bool)success
{
    CCLOG(@"onPlayersAddedToMatch: %@", success ? @"YES" : @"NO");
}
-(void) onMatchmakingViewDismissed
{
    CCLOG(@"onMatchmakingViewDismissed");
}
-(void) onMatchmakingViewError
{
    CCLOG(@"onMatchmakingViewError");
}
-(void) onPlayerConnected:(NSString*)playerID
{
    CCLOG(@"onPlayerConnected: %@", playerID);
}
-(void) onPlayerDisconnected:(NSString*)playerID
{
    CCLOG(@"onPlayerDisconnected: %@", playerID);
}
-(void) onStartMatch
{
    CCLOG(@"onStartMatch");
}
-(void) onReceivedData:(NSData*)data fromPlayer:(NSString*)playerID
{
    CCLOG(@"onReceivedData: %@ fromPlayer: %@", data, playerID);
}

1
请注意,如果您想要在多人游戏应用中使用GameKitHelper类,则该类不能充分考虑设备在“限制”应用中受到多人游戏限制的情况。 - PKCLsoft
1
嗨,就像我在回答中提到的那样,这不是我的辅助类,而且已经过时了。不过我创建了自己的一个:http://github.com/ablfx/ABGameKitHelper - Alexander Blunck
@AlexanderBlunck,这个许可证的意思是我可以使用你的代码而无需做任何事情吗? - Coder404
@FerencDajka 你需要将这个类集成到一个已启用Game Center的带有有效App Id的项目/应用中。 - Alexander Blunck
@AlexanderBlunck 非常感谢您的帮助,以及提供的代码,最终我成功了。我会在整个星系中传播您辉煌的名字! - Ferenc Dajka
显示剩余17条评论

3
你可以使用GamKit框架。游戏中心非常强大,可以管理您的在线游戏和游戏得分。使用游戏中心,您可以创建两种类型的游戏:
1:实时比赛(实时赛车) 2:回合制比赛(在线纸牌游戏)
我向您分享RaywenderLich的链接:
实时比赛:http://www.raywenderlich.com/3276/game-center-tutorial-for-ios-how-to-make-a-simple-multiplayer-game-part-12 回合制比赛:http://www.raywenderlich.com/5480/beginning-turn-based-gaming-with-ios-5-part-1

2
尽管Alexander Blunck的回答是合理的,但对于早期版本的iOS(例如3.2),以下代码行将会出错,这不是你想要的。
window.rootViewController = viewController;
如果你要使用Steffen的代码(呃),那么你可能需要添加一个方法来直接设置UI视图控制器,而不是让它假定可以通过UIApplication获取。

修改了我的 Helper 类,使其能够与所有应用程序 / iOS 版本配合使用。 - Alexander Blunck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接