Game Center в iOS: достижения GKScore против GKA?

У меня есть вопрос по теме, связанной с "Game Center" в iOS: GKAchievement vs. GKScore?

(1) достижение GKA

Я знаю, что в iOS Game Center мы можем определить достижения и списки лидеров и указать, например, что, когда геймеры завершат первое достижение, мы даем игрокам 10 очков. Именно тогда мы используем GKAchievement, чтобы отправить достижение в игровой центр, когда пользователи успешно завершили достижение.

(2) GKScore

Итак, когда нам нужно использовать GKScore? Как я упоминал в предыдущем абзаце, мы можем дать геймерам конкретный счет, когда геймеры завершат первое достижение. Тогда нужно ли нам использовать GKScore, если мы уже используем GKAchievement, чтобы давать пользователям новые оценки за новые достижения? Какова цель GKScore?

Или, может быть, когда мы используем GKScore, нам не нужно использовать GKAchievement? Другими словами, нам нужно использовать только один из этих двух классов, а не оба?


Вот типичный код в C# для отправки оценки GKScore:

    public void reportScore(long score, string category, GameCenterController controller, bool show_dialog)
    {
        GKScore scoreReporter = new GKScore (category);
        scoreReporter.Value = score;

        scoreReporter.ReportScore ((error) => {     
        ((error) => {   // original
            if(error == null){
                if(show_dialog){
                    new UIAlertView ("Score Reported to Game Center", "Score Reported Successfully", null, "OK", null).Show ();
                }
            }
            else{
                if(show_dialog){
                    new UIAlertView ("Can't Submit Score to Game Center", "Please make sure that you logon to Game Center", null, "OK", null).Show ();
                }
            }

            //NSThread.SleepFor(1);         
            controller.updateHighScore();   

        });
    } 

1 ответ

Решение

Я провел некоторое тестирование и сам разобрался с " ответом ".

Если мы используем как GKAchievement, так и GKScore для представления достижений и результатов, тогда результаты, представленные через GKScore, будут отображаться в глобальных таблицах лидеров. Эта оценка будет перезаписывать оценку, которая должна отображаться при отправке достижений через GKAchievement.

Вот мои 2 теста:

(А) Контрольный пример 1:

Предположим, я определил достижение, которое стоит 100 очков в Game Center. Когда пользователи играют в игру и завершают это достижение, я сначала отправляю это достижение, а затем выставляю счет 3456 баллов (с помощью моего кода для тестирования).

Затем я открываю игровой центр и вижу, что мой счет, отображаемый в таблице лидеров, составляет 3456 (а НЕ 100 баллов).

(B) Контрольный пример 2:

Предположим, я определил достижение, которое стоит 100 очков. Когда пользователи играют в игру и выполняют это достижение, я только отправляю это достижение, а затем НЕ выставляю баллы 3456 баллов вручную (через мой код для тестирования).

Затем я открываю Game Center и вижу, что мой счет, отображаемый в таблице лидеров, равен 100.


ПРИМЕЧАНИЕ. Это следующее поведение происходит только в том случае, если разработчики установили "Тип представления оценки" на "Наилучшая оценка".

Если вы впоследствии используете GKScore для отправки оценки, которая ВЫШЕ, чем существующая оценка в таблице лидеров в Game Center, тогда эта новая ВЫСОКАЯ оценка будет автоматически размещена в таблице лидеров (от Apple Game Center, и нам не нужно ничего делать еще).

Теперь, если вы впоследствии используете GKScore для отправки оценки, которая НИЖЕ, чем существующая оценка в таблице лидеров в Game Center, тогда эта новая НИЖНЯЯ оценка НЕ будет размещена в таблице лидеров.


(С другой стороны, если разработчики установили "Тип представления счета" на "Самый последний счет", то в Game Center будет опубликован только "Самый последний счет", а НЕ "Самый высокий счет".)

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