首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >游戏中心得分不发球

游戏中心得分不发球
EN

Stack Overflow用户
提问于 2012-01-04 18:57:33
回答 1查看 2.3K关注 0票数 1

我试着把游戏结束时的分数加到游戏中心,但是它并没有给游戏中心增加任何东西。我一整天都在寻找我犯的‘错误’,但我什么也没看到?

下面是我们的一些代码。

.h

代码语言:javascript
运行
复制
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <GameKit/GameKit.h>

@class GKLeaderboard, GKAchievement, GKPlayer;

int counter;

@protocol TopscoreDelegate <NSObject>
@optional
- (void) processGameCenterAuth: (NSError*) error;
- (void) scoreReported: (NSError*) error;
- (void) reloadScoresComplete: (GKLeaderboard*) leaderBoard error: (NSError*) error;
@end

@interface Topscore : UIViewController <NSObject> {

    AVAudioPlayer *audioPlayer;
    IBOutlet UILabel *count;
    Topscore* Topscore;
}

- (IBAction)tweetTapped:(id)sender;
- (IBAction) subScore;
- (IBAction) showLeader;
- (void) reportScore;

@property (nonatomic, assign)  id <TopscoreDelegate> delegate;

+ (BOOL) isGameCenterAvailable;
- (void) authenticateLocalUser;

@property (nonatomic, retain) Topscore *Topscore;
@property (nonatomic, retain) NSString* currentLeaderBoard;

@property (nonatomic, retain) UILabel *count;
@property(nonatomic, readonly, retain) NSDate *date;

- (void) reportScore: (int64_t) score forCategory: (NSString*) category;
- (void) reloadHighScoresForCategory: (NSString*) category;

@end

.m文件看起来像;我在xib文件中有一个按钮连接到IBAction Subscore。我没有收到错误,但只收到了一些警告。

代码语言:javascript
运行
复制
PerformSelector may cause a leak because its selector is unknown

这一警告在线;

委托performSelector:选择器withObject: arg withObject: err;

.m

代码语言:javascript
运行
复制
@interface Topscore ()

@property (strong, nonatomic) NSString *imageString;
@property (strong, nonatomic) NSString *urlString;
- (void)clearLabels;
@end

@implementation Topscore

@synthesize count, date, urlString = _urlString, imageString = _imageString, delegate, Topscore, currentLeaderBoard;

- (void) callDelegate: (SEL) selector withArg: (id) arg error: (NSError*) err
{
    assert([NSThread isMainThread]);
    if([delegate respondsToSelector: selector])
    {
        if(arg != NULL)
        {
            [delegate performSelector: selector withObject: arg withObject: err];
        }
        else
        {
            [delegate performSelector: selector withObject: err];
        }
    }
    else
    {
        NSLog(@"Missed Method");
    }
}

- (void) callDelegateOnMainThread: (SEL) selector withArg: (id) arg error: (NSError*) err
{
    dispatch_async(dispatch_get_main_queue(), ^(void)
                   {
                       [self callDelegate: selector withArg: arg error: err];
                   });
}

//..

+ (BOOL) isGameCenterAvailable
{
    // check for presence of GKLocalPlayer API
    Class gcClass = (NSClassFromString(@"GKLocalPlayer"));

    // check if the device is running iOS 4.1 or later
    NSString *reqSysVer = @"4.1";
    NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
    BOOL osVersionSupported = ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending);

    return (gcClass && osVersionSupported);
}

- (void) authenticateLocalUser
{
    if([GKLocalPlayer localPlayer].authenticated == NO)
    {
        [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:^(NSError *error) 
         {
             [self callDelegateOnMainThread: @selector(processGameCenterAuth:) withArg: NULL error: error];
         }];
    }
}

- (void) reloadHighScoresForCategory: (NSString*) category
{
    GKLeaderboard* leaderBoard= [[GKLeaderboard alloc] init];
    leaderBoard.category= category;
    leaderBoard.timeScope= GKLeaderboardTimeScopeAllTime;
    leaderBoard.range= NSMakeRange(1, 1);

    [leaderBoard loadScoresWithCompletionHandler:  ^(NSArray *scores, NSError *error)
     {
         [self callDelegateOnMainThread: @selector(reloadScoresComplete:error:) withArg: leaderBoard error: error];
     }];
}

//..

- (void) showAlertWithTitle: (NSString*) title message: (NSString*) message
{
    UIAlertView* alert= [[UIAlertView alloc] initWithTitle: title message: message 
                                                  delegate: NULL cancelButtonTitle: @"OK" otherButtonTitles: NULL];
    [alert show];

}

- (void) scoreReported: (NSError*) error;
{
    if(error == NULL)
    {
        [self.Topscore reloadHighScoresForCategory: self.currentLeaderBoard];
        [self showAlertWithTitle: @"High Score Reported!"
                         message: [NSString stringWithFormat: @"", [error localizedDescription]]];
    }
    else
    {
        [self showAlertWithTitle: @"Score Report Failed!"
                         message: [NSString stringWithFormat: @"Reason: %@", [error localizedDescription]]];
    }
}

- (IBAction) subScore {

    GKScore *scoreReporter = [[GKScore alloc] initWithCategory:@"01"];
   scoreReporter.value = counter;


    [scoreReporter reportScoreWithCompletionHandler:^(NSError *error) {
        if (error != nil)
        {
            NSLog(@"Failed: %i", counter);   
        } else {
            NSLog(@"Succes: %i", counter);  


            [self callDelegateOnMainThread: @selector(scoreReported:) withArg: NULL error: error];

        }
    }];

}

如果你需要更多的代码,请问我!

PS:领头羊正在出现,但是分数在点击按钮(IBAction)后没有添加/发布/添加。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-08 04:17:14

我回答了一个类似的问题,关于游戏中心的分数没有出现。

您至少需要至少有两个记分,一个来自不同帐户:Solution

同样的,如果董事会上只有一个人,它不会返回任何分数,因此也应该要求GC的分数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8732350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档