要设置排行榜,请转到iTunes Connect>管理应用程序>您的应用程序>管理游戏中心>添加排行榜>单排行榜。
给你的排行榜一个名字和所需的所有组织信息。
将此方法添加到
GCHelper.m
:
-(void) submitScore:(int64_t)score Leaderboard: (NSString*)leaderboard
{
if (!_gameCenterFeaturesEnabled) {
return;
}
GKScore* gkScore =
[[GKScore alloc]
initWithLeaderboardIdentifier:leaderboard];
gkScore.value = score;
[gkScore reportScoreWithCompletionHandler:
^(NSError* error) {
[self setLastError:error];
BOOL success = (error == nil);
if ([_delegate
respondsToSelector:
@selector(onScoresSubmitted:)]) {
[_delegate onScoresSubmitted:success];
}
}];
}
并将此添加到
GCHelper.h
:
-(void) submitScore:(int64_t)score Leaderboard: (NSString*)leaderboard;
现在,在游戏的.m中,将此方法添加到游戏结束时调用的任何方法中:
[[GCHelper sharedGameKitHelper] submitScore:highScore Leaderboard:LeaderboardName];
在此示例中
highScore
是
int_64
你的分数和
LeaderboardName
是一个
NSString
等于您在iTunes Connect中设置的排行榜标识符。还要确保将Game Center功能添加到应用程序中。
之后,你应该可以提交高分了!
也将此添加到GCHelper.m
-(void) setLastError:(NSError*)error {
_lastError = [error copy];
if (_lastError) {
NSLog(@"GameKitHelper ERROR: %@", [[_lastError userInfo]
description]);
}
}
并将其添加到GCHelper.h
@property (nonatomic, assign)id<GCHelperProtocol> delegate;
这是我的GCHelper。h:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <GameKit/GameKit.h>
@protocol GCHelperProtocol<NSObject>
-(void) onScoresSubmitted:(bool)success;
@end
@interface GCHelper : NSObject
@property (nonatomic, assign)id<GCHelperProtocol> delegate;
@property (nonatomic, readonly) NSError* lastError;
+ (id) sharedGameKitHelper;
-(void) authenticateLocalPlayer;
-(void) submitScore:(int64_t)score Leaderboard: (NSString*)leaderboard;
@end
这里是我的GCHelper.m:
#import "GCHelper.h"
@interface GCHelper ()
<GKGameCenterControllerDelegate> {
BOOL _gameCenterFeaturesEnabled;
}
@end
@implementation GCHelper
#pragma mark Singleton stuff
+(id) sharedGameKitHelper {
static GCHelper *sharedGameKitHelper;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedGameKitHelper =
[[GCHelper alloc] init];
});
return sharedGameKitHelper;
}
#pragma mark Player Authentication
-(void) authenticateLocalPlayer {
GKLocalPlayer* localPlayer =
[GKLocalPlayer localPlayer];
localPlayer.authenticateHandler =
^(UIViewController *viewController,
NSError *error) {
[self setLastError:error];
if (localPlayer.authenticated) {
_gameCenterFeaturesEnabled = YES;
} else if(viewController) {
[self presentViewController:viewController];
} else {
_gameCenterFeaturesEnabled = NO;
}
};
}
#pragma mark Property setters
-(void) setLastError:(NSError*)error {
_lastError = [error copy];
if (_lastError) {
NSLog(@"GameKitHelper ERROR: %@", [[_lastError userInfo]
description]);
}
}
#pragma mark UIViewController stuff
-(UIViewController*) getRootViewController {
return [UIApplication
sharedApplication].keyWindow.rootViewController;
}
-(void)presentViewController:(UIViewController*)vc {
UIViewController* rootVC = [self getRootViewController];
[rootVC presentViewController:vc animated:YES
completion:nil];
}
#pragma mark Scores
- (void) reportAchievementWithID:(NSString*) AchievementID {
[GKAchievement loadAchievementsWithCompletionHandler:^(NSArray *achievements, NSError *error) {
if(error) NSLog(@"error reporting ach");
for (GKAchievement *ach in achievements) {
if([ach.identifier isEqualToString:AchievementID]) {
return ;
}
}
GKAchievement *achievementToSend = [[GKAchievement alloc] initWithIdentifier:AchievementID];
achievementToSend.percentComplete = 100;
achievementToSend.showsCompletionBanner = YES;
[achievementToSend reportAchievementWithCompletionHandler:NULL];
}];
}
-(void) submitScore:(int64_t)score Leaderboard: (NSString*)leaderboard
{
if (!_gameCenterFeaturesEnabled) {
return;
}
GKScore* gkScore =
[[GKScore alloc]
initWithLeaderboardIdentifier:leaderboard];
gkScore.value = score;
[gkScore reportScoreWithCompletionHandler:
^(NSError* error) {
[self setLastError:error];
BOOL success = (error == nil);
if ([_delegate
respondsToSelector:
@selector(onScoresSubmitted:)]) {
[_delegate onScoresSubmitted:success];
}
}];
}
-(void) gameCenterViewControllerDidFinish:(GKGameCenterViewController *)gameCenterViewController
{
}
@end