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.
Так что значение с плавающей запятой сейчас недоступно.