2014-05-25 1 views
5

Turn Base Multiplayer game using Google Play Services을 구현 중입니다. 추적 기능이 없어진 것 같습니다 : 추적 성공과 실패! 어떤 종류의 경쟁 게임에서도 매우 중요한 기능처럼 보입니다.Google Play 게임 서비스에서의 승리 및 손실 추적

내가 누락 된 항목이 있습니까? 이미 Google에서 어떤 방식으로 처리 했습니까?

그렇지 않은 경우 누군가가 자체 w/l 추적 시스템을 구현했는지 그리고 어떻게 접근했는지 궁금합니다. 현실과 동기화되지 않을 수도 있으므로 로컬로 저장하는 것이 걱정됩니다. Google Cloud Storage를 사용할 수 있다고 생각하지만, 일치하는 항목을 파악하는 것이 약간 오류가 발생할 수 있습니다 (예 : 같은 항목에서 여러 번이기거나 잃는 경우). 어쩌면 Google Play 리더 보드 시스템을 사용하면 친구/기타와 비교할 수있을 것입니다.

답변

0

구현에 따라 다릅니다. 저는 체스 어플리케이션을 만들었고, 단지 내 승과 패를 추적하기 위해 SharedPreferences을 사용합니다. 제대로 사용하면 오류가 발생하지 않습니다.

예 :

SharedPreferences prefs = this.getSharedPreferences(
     "com.example.app", Context.MODE_PRIVATE); 
if (gameOver(Side.White)) { 
    prefs.edit().putLong(dateTimeKey, prefs.getLong(losses, 0) + 1).commit(); 
} else if (gameOver(Side.Black)){ 
    prefs.edit().putLong(dateTimeKey, prefs.getLong(wins, 0) + 1).commit(); 
} 
+0

나도 완벽하지는 않지만 내 경우에는 많은 문자열 처리가 필요하며 더하기 조작이 필요하다. Google은 이러한 요구를 실제로 처리해야합니다. – John

2

Google Play 게임 서비스에서 제공하는 Events을 사용해 볼 수도 있습니다. 여기를 사용하는 단계에있다 : 게임 서비스에 사이드 바의 클릭에 안드로이드 개발자 콘솔

    1. 이동, 선택하여 앱, 다음 이벤트 '승리라는
    2. 다음 두 가지 새로운 이벤트를 생성 한 '다른'패배 '가, 다음
    3. 새로운 이벤트의 리소스 ID를 확인하기 위해 가져 오기 리소스 링크를 클릭하고 입술에 앱에 추가 변경 사항을 게시합니다/값 디렉토리
    4. 때 게임에 당첨되거나 분실 된 경우 다음 코드를 호출하십시오. 여기서 eventRef는 귀하의 fr입니다 당신이 그렇지에 these instructions에 따라, 당신의 apiClient 인스턴스가 aHelper.getApiClient()를 얻을 수있다 basegameutils를 사용하는 경우

      int eventInt = activity.getApplicationContext().getResources().getIdentifier(eventRef, "string", "com.yourpackage.android"); 
      String eventID = activity.getString(eventInt); 
      Games.Events.increment(apiClient, eventID, 1); 
      

      : iendly 자원 이름 당신도 "events_games_won"또는 "events_games_lost", 마지막 단계에서 추가 그것을 설정하십시오.

      PendingResult<Events.LoadEventsResult> results = Games.Events.load(apiClient, true); 
      results.setResultCallback(new ResultCallback<Events.LoadEventsResult>() { 
           @Override 
           public void onResult(Events.LoadEventsResult result) 
           { 
            Events.LoadEventsResult r = (Events.LoadEventsResult)result; 
            EventBuffer eb = r.getEvents(); 
            for (int i=0; i < eb.getCount(); i++) { 
             Event event = eb.get(i); 
             // do something, like cache the results for later 
             YourGameState.eventStats.put(event.getName(), (int)event.getValue()); 
            } 
            eb.close(); 
            listener.onResult(); 
           } 
          }); 
      

    유지하고 로컬 카운트를 관리하는 동안이 방법의 장점은 다음과 같습니다 :

    • 당신이 저장 한 데이터를 읽으려면,이 같은 콜백을 사용할 수 있습니다

    • 승리와 손실은 Google Play의 클라우드에 저장되며 모든 사용자 기기에 저장됩니다.
    • 이벤트를 사용하여 "이번 주 10 번 우승"또는 "이번 주 무패"와 같은 퀘스트 (Google Play에서도 설명 됨)
    • Google Play는 게임을하는 모든 사람의 이벤트에 대한 통계를 제공하므로 매우 유용합니다. 플레이어 활동 및 실적 분석하기

    그리고 같은 방법으로 원하는 이벤트를 만들 수 있습니다.

  • +0

    이것은 결과를 추적하기 위해 게임이 종료 된 시점에 플레이어가 온라인 상태 여야 함을 의미하지는 않습니까? 내 게임은 턴 기반/비동기식이므로 사용자는 게임이 끝나면 실제로 게임에 참여하지 못할 수 있습니다. – Goose

    +0

    https://developer.android.com/reference/com/google/android/gms/games/event/Events.html (여기)에서 설명했듯이 사용자가 온라인 상태가 아니어도 이벤트는 로컬에 캐시됩니다 일괄 적으로 서버로 플러시됩니다. 따라서 오프라인 일지라도 다음에 Google Play 연결이 다시 설정되면 이벤트가 업데이트됩니다. 응용 프로그램의 경우 플레이어에게 게임 결과를 알리는 곳에서 승패 이벤트를 증가시키는 코드를 삽입 할 수 있습니다. – Jaron

    +0

    죄송합니다. 온라인에 대한 의미가 명확하지 않았습니다. 내 말은 일치 항목 (Google 서버에서 업데이트 된 게임 상태를 요청하는)을 열지 않는 한 사용자가 경기 결과에 대한 정보를받지 못한다는 뜻입니다. 사용자가 경기 결과를보기 위해 결코 경기에 돌아 오지 않으면 (예 : 이길 수있는 방법이 없다고 결정한 경우) 그들은 잃어 버렸다 고 말하는 업데이트를받지 못하고 이벤트는 기록되지 않습니다. 가장 일반적인 기법은 잃기 전에 성냥을 남겨두고 완벽한 승리 %를 유지하기 위해 결코 돌아 가지 않는 것입니다. – Goose

    관련 문제