我可以从C ++查询游戏中心的API,没有Objective-C?

我正在写一个需要Game Center排行榜的游戏。 但是,这些并不是非常广泛的排行榜。 我只需要能够在玩家完成一个关卡时自动提交一个分数。 然后,当玩家访问特定的游戏屏幕时,它查询他/她在排行榜上的位置并返回值和位置。 我不需要UI或任何成就。 只需要这些值。

这个信息可以用C ++查询吗? 我正在使用Cocos2d-x,如果可能的话,我想保留所有的C ++。

这个信息可以用C ++查询吗?

不是几乎没有。 苹果的Game Center API是Objective-C的一个。 从技术上讲,如果你想避免Objective-C代码,你可以做一堆objc_msgSend调用,但这不实际。 相反,您可以通过创建一个C ++头文件为相关的Game Center调用创建一个简单的包装:

 // GameCenterAccess.h #pragma once void submitPlayerScore (int score); int getPlayerScore (); 

并在Objective-C ++文件中实现这些函数(以.mm扩展名结尾;如果您不打算在头文件中执行C ++特定的任何操作(如使用名称空间),则可以使用常规.m文件):

 // GameCenterAccess.mm #include "GameCenterAccess.h" void submitPlayerScore (int score) { GKScore * scoreObject = [[GKScore alloc] initWithLeaderboardIdentifier:/* your leaderboard id*/]; scoreObject.value = score; [GKScore reportScores:@[scoreObject] withCompletionHandler:^(NSError * error) { ... // scores reported }]; } int getPlayerScore () { GKLeaderboard * board = [[GKLeaderboard alloc] init]; [board loadScoresWithCompletionHandler:^(NSArray * scores, NSError * error) { ... // do something with board.localPlayerScore }]; 

等等(上面的代码没有经过testing,但应该是对现实的足够合理的近似;你会想要做一些与查询的asynchronous性更聪明)。

可以按照您所描述的方式使用排行榜API:只需存储每个玩家的简单分数,而不用担心所有相关的UI和成就(支持Game Center的行为将使您的游戏出现在Game Center应用程序中,并显示所有OS所要求的“必需的”游戏中心内容,但不需要做太多的工作)。 但是您将需要使用API​​的某些部分,并因此以某种方式将其封装在上面的包装界面中。

例如,要传输分数,您需要使用GKScore API和GKPlayer API来表示获得分数的玩家,以及GKLeaderboard本身 。