Как назначить float для int64_t - PullRequest
1 голос
/ 20 августа 2011

Чтобы загрузить счет в игровой центр, требуется, чтобы вы имели значение типа int64_t.

Есть ли способ просто конвертировать мои float в int64_t?

Я построил всю свою игру на счету, и мне нужно простое решение, есть идеи?

Ответы [ 3 ]

1 голос
/ 13 марта 2012

Я сделаю это.Чужой ответ (из http://www.cocos2d -iphone.org / forum / topic / 14839 )

Каждый балл должен быть представлен как int64.Так что вам нужно конвертировать ваш float в соответствии с настройками вашей таблицы лидеров.Так что с фиксированным 3 dp вам нужно умножить число с плавающей точкой на 1000, чтобы получить 3 dp в int - затем отправить.

so

int64_t gcScore = (int64_t) (оценка * 1000.0f));

gkscore.value = gcScore;

Когда в игру вступает какое-то округление, важно удостовериться, что то, что получено, является тем, что также было показано игроку - у нас были некоторые проблемывремя от времени находясь 1 на ГХ и на игровом дисплее - нужно было просто проходить каждое отображение и преобразование значений счета, чтобы убедиться, что они позаботились о правильном отображении.

Все изменения настроек списка лидеров требуюткажется, и представленные результаты часто могут не отображаться некоторое время.Песочница Game Center довольно ужасна, если честно.После того, как вы начнете жить, лучше реагировать на новые результаты, но вы не можете вносить какие-либо изменения в формат таблицы лидеров, поэтому вы должны упорствовать в Песочнице, чтобы сделать это правильно.

0 голосов
/ 20 августа 2011

Вам нужно будет преобразовать число с плавающей точкой в ​​int64_t, а затем проверить на переполнение. Это приведение будет усекать число, то есть 5.655 станет 5.

    try {
       score = (int64_t)floatScore;
    }
    catch(OverflowException e) {
       // Print error
    }
0 голосов
/ 20 августа 2011

Если ваши числа с плавающей запятой ограничены в размере (меньше чем 9 223 372 036 854 775 807), конверсия составит

int64_t myInt = (int64_t) myFloat;

Если вы хотите "сохранить" десятичные дроби, вы можете масштабировать результаты (умножить число с запятой на 10 или 100):

int64_t myInt_scaled = (int64_t) (myFloat * 100.0);
...