iOS Game Center отправляет float вместо int64_t

Я пытаюсь представить float с двумя десятичными длинами в моей таблице лидеров Game Center, однако единственный формат, который разрешено отправлять в int64_t, Я использую метод оценки отчета Apple по умолчанию:

- (void)reportScore:(int64_t)score forCategory:(NSString *)category {
    GKScore *scoreReporter = [[GKScore alloc] initWithCategory:category];   
    scoreReporter.value = score;
    [scoreReporter reportScoreWithCompletionHandler: ^(NSError *error) {
        [self callDelegateOnMainThread: @selector(scoreReported:) withArg: NULL error: error];
    }];
}

Я пытаюсь использовать этот метод для предоставления оценки методу отчета:

- (IBAction)increaseScore {
    self.currentScore = self.currentScore + 1;
    currentScoreLabel.text = [NSString stringWithFormat: @"%lld", self.currentScore];
    NSLog(@"%lld", self.currentScore);
}

Пожалуйста, помогите, я гуглил как сумасшедший и не могу найти ответ на этот вопрос.

3 ответа

Решение

Вы можете отправлять только 64-битные целые числа в качестве результатов в таблицу лидеров. Из документации:

Для Game Center оценка - это всего лишь 64-разрядное целое число, сообщаемое вашим приложением. Вы можете сами решать, что означает оценка, и как ваша программа рассчитывает ее. Когда вы готовы добавить таблицу лидеров в свое приложение, вы настраиваете таблицы лидеров в iTunes Connect, чтобы сообщить Game Center, как счет должен быть отформатирован и отображен на проигрывателе. Кроме того, вы предоставляете локализованные строки для правильного отображения результатов на разных языках. Основным преимуществом настройки списков лидеров в iTunes Connect является то, что приложение Game Center может показывать результаты вашей игры без необходимости писать какой-либо код.

На этой странице документа должна быть информация о форматировании вашего счета. Похоже, что для отображения плавающих партитур вам придется повозиться с настройками формата в iTunes Connect.

Обновить

Попробуйте это для увеличения рейтинга:

- (IBAction) increaseScore {      
     self.currentScore = self.currentScore + 5; 
     float score = (float)self.currentScore / 100.0f;
     currentScoreLabel.text = [NSString stringWithFormat: @"%f", score]; 
     NSLog(@"%lld", self.currentScore);
}

GameCenter принимает только int64_t

Единственная разница между значениями, которые появляются как числа с плавающей запятой или десятичные значения, и значениями, которые появляются как целые числа, является положением десятичной метки, хотя на самом деле все они являются int64_t.

Если ваше внутреннее представление двойное, и вы настроили игровой центр на показ 3 цифр после десятичной запятой, вам нужно преобразовать его в целое число, умножив на 10^3 и приведя к целому числу.

int64_t gameCenterScore = (int64_t)(doubleValue * 1000.0f)

Вы можете увидеть файл GKScore.h.

@property(nonatomic, assign)            int64_t     value;              // The score value as a 64bit integer.

Так что значение с плавающей запятой сейчас недоступно.

Другие вопросы по тегам