게임에 저장된 게임 추가

이 가이드에서는 플레이어의 게임 진행 상황 데이터를 저장하고 로드하는 방법을 저장된 게임 서비스로 구성됩니다. 이 언제든지 플레이어의 게임 진행 상황을 자동으로 로드하고 저장할 수 있습니다. 할 수 있습니다. 이 서비스를 통해 플레이어가 사용자를 트리거하도록 할 수도 있습니다. 인터페이스를 사용하여 기존 저장 게임을 업데이트 또는 복원하거나 새 게임을 만들 수 있습니다.

시작하기 전에

아직 검토하지 않은 경우 저장된 게임 게임 개념

Saved Games API를 사용하여 코딩을 시작하기 전에 다음을 실행합니다.

데이터 형식 및 크로스 플랫폼 호환성

Google 서버에 저장하는 저장된 게임 데이터는 다음 위치에 있어야 합니다. std::vector<uint8_t> 형식으로 이미지를 캡처합니다. 저장된 게임 서비스가 인코딩을 처리함 교차 플랫폼 호환성을 위한 데이터 Android 애플리케이션은 동일한 데이터를 바이트 배열로 변환할 수 있습니다.

캠페인의 데이터 형식을 선택할 때 플랫폼별 형식을 사용하지 저장된 게임 데이터 다음과 같은 데이터 형식을 사용하는 것이 좋습니다. 여러 플랫폼에서 강력한 라이브러리 지원을 제공하는 XML 또는 JSON입니다.

저장된 게임 서비스 사용 설정

저장된 게임 서비스를 사용하려면 먼저 있습니다. 이렇게 하려면 다음을 사용하여 서비스를 만들 때 EnableSnapshots()를 호출합니다. gpg::GameServices::Builder입니다. 이렇게 하면 추가 인증 범위가 사용 설정됩니다. 다음 인증 이벤트에서 저장된 게임에 필요합니다.

저장된 게임 표시 중

게임에서 플레이어가 특정 게임을 저장하거나 트리거하도록 트리거하는 옵션을 제공할 수 있습니다. 저장된 게임 복원하기 플레이어가 이 옵션을 선택하면 게임에서 플레이어가 기존 저장 슬롯을 표시하고 이러한 슬롯 중 하나에 저장하거나 로드하거나, 저장된 게임을 새로 만들 수 있습니다. 사용 다음 방법을 사용하세요.

  SnapshotManager::ShowSelectUIOperation(...)

저장된 게임 선택 UI를 사용하면 저장된 게임을 새로 만들고, 기존에 저장된 게임에 관한 세부정보를 확인하고, 이전 저장된 게임을 로드할 수 있습니다

  SnapshotManager::SnapshotSelectUIResponse response;
  if (IsSuccess(response.status)) {
  if (response.data.Valid()) {
    LogI("Description: %s", response.data.Description().c_str());
    LogI("FileName %s", response.data.FileName().c_str());
    //Opening the snapshot data
    …
  } else {
    LogI("Creating new snapshot");
    …
  }
} else {
  LogI("ShowSelectUIOperation returns an error %d", response.status);
}

다음 예는 기본 저장된 게임 UI를 표시하는 방법을 보여줍니다. 플레이어의 UI 선택을 처리합니다.

  service_->Snapshots().ShowSelectUIOperation(
  ALLOW_CREATE_SNAPSHOT,
  ALLOW_DELETE_SNAPSHOT,
  MAX_SNAPSHOTS,
  SNAPSHOT_UI_TITLE,
  [this](gpg::SnapshotManager::SnapshotSelectUIResponse const & response) {
  …
      }

위 예에서 ALLOW_CREATE_SNAPSHOTtrueMAX_SNAPSHOTS이면 사용자가 현재 보유하고 있는 실제 스냅샷 수보다 큽니다. 기본 스냅샷 UI에서 플레이어에게 새 스냅샷을 만드는 버튼이 제공됩니다. 기존 게임을 선택하는 대신 게임 저장 옵션을 선택합니다. (버튼이 표시되면 는 UI 하단에 있습니다.) 플레이어가 이 버튼을 클릭하면 SnapshotSelectUIResponse 응답이 유효하지만 데이터가 없습니다.

저장된 게임 열기 및 읽기

저장된 게임에 액세스하고 콘텐츠를 읽거나 수정하려면 먼저 게임을 여세요. 저장된 게임을 나타내는 SnapshotMetadata 객체입니다. 그런 다음 SnapshotManager::Read*() 메서드를 사용하여 지도 가장자리에 패딩을 추가할 수 있습니다.

다음 예는 저장된 게임을 여는 방법을 보여줍니다.

  LogI("Opening file");
  service_->Snapshots()
  .Open(current_snapshot_.FileName(),
               gpg::SnapshotConflictPolicy::BASE_WINS,
        [this](gpg::SnapshotManager::OpenResponse const & response) {
           LogI("Reading file");
           gpg::SnapshotManager::ReadResponse responseRead =
           service_->Snapshots().ReadBlocking(response.data);
          …
        }

데이터 충돌 감지 및 해결

SnapshotMetadata 객체를 열면 저장된 게임 서비스는 저장된 게임 충돌이 있는지 여부 저장된 플레이어의 로컬 기기에 저장된 게임이 원격 버전과 동기화되지 않음 Google 서버에 저장됩니다.

저장된 게임을 열 때 지정하는 충돌 정책은 게임 서비스에서 데이터 충돌을 자동으로 해결하는 방법 정책은 다음 중 하나일 수 있습니다.

분쟁 정책 설명
SnapshotConflictPolicy::MANUAL 저장된 게임 서비스가 해결 조치를 취할 수 있습니다. 대신 게임에서 custom 병합을 참조하세요.
SnapshotConflictPolicy::LONGEST_PLAYTIME 저장된 게임 서비스가 저장된 게임입니다.
SnapshotConflictPolicy::BASE_WINS 저장된 게임 서비스에서 기본 플레이어를 선택해야 함을 나타냅니다. 저장된 게임입니다.
SnapshotConflictPolicy::REMOTE_WINS 저장된 게임 서비스에서 리모컨을 선택해야 함을 나타냅니다. 저장된 게임입니다. 원격 버전은 저장된 감지되어 최신 버전의 게임이 있는 경우 타임스탬프입니다.

GPGSnapshotConflictPolicyManual 이외의 충돌 정책을 지정한 경우 저장된 게임 서비스에서 저장된 게임을 병합하고 업데이트된 버전을 반환합니다. 결과 SnapshotManager::OpenResponse 값을 통해 전달됩니다. 게임을 열 수 있습니다. 작성한 후 SnapshotManager::Commit(...)을 호출합니다. 메서드를 사용하여 저장된 게임을 Google 서버에 커밋할 수 있습니다.

맞춤 병합 수행

SnapshotConflictPolicy::MANUAL을 충돌 정책으로 지정한 경우 계속하려면 게임에서 감지된 데이터 충돌을 해결해야 합니다. 저장된 게임에 대한 읽기 또는 쓰기 작업

이 경우 데이터 충돌이 감지되면 서비스에서 SnapshotManager::OpenResponse를 통한 다음 매개변수 사용:

  • 이 충돌을 고유하게 식별하는 conflict_id (이 값을 사용함) 저장된 게임의 최종 버전을 커밋할 때)
  • 저장된 게임의 충돌하는 기본 버전 그리고
  • 저장된 게임의 충돌하는 원격 버전

게임에서 저장할 데이터를 결정한 다음 SnapshotManager::ResolveConflictBlocking() 메서드를 사용하여 최종 호출 커밋/해결 Google 서버로 전송합니다.

    //Resolve conflict
    gpg::SnapshotManager::OpenResponse resolveResponse =
        manager.ResolveConflictBlocking(openResponse.conflict_base, metadata_change,
                                  openResponse.conflict_id);

저장된 게임 작성하기

저장된 게임을 작성하려면 먼저 게임에서 SnapshotMetadata 객체를 발견된 데이터 충돌을 해결한 다음 SnapshotManager::Commit() 메서드를 사용하여 저장된 게임 변경사항.

다음 예는 변경사항을 만들고 저장된 게임입니다.

  1. 먼저 수정할 스냅샷을 열고 모든 충돌이 기반을 선택하여 해결할 수 있습니다

    service_->Snapshots().Open(
          file_name,
          gpg::SnapshotConflictPolicy::BASE_WINS,
          [this](gpg::SnapshotManager::OpenResponse const &response) {
            if (IsSuccess(response.status)) {
              // metadata : gpg::SnapshotMetadata
              metadata = response.data;
            } else {
              // Handle snapshot open error here
            }
          });
    
  2. 그런 다음 표지 이미지:

    gpg::SnapshotMetadataChange::Builder builder;
    gpg::SnapshotMetadataChange metadata_change =
        builder.SetDescription("CollectAllTheStar savedata")
                 .SetCoverImageFromPngData(pngData).Create();
    
  3. 마지막으로 저장된 게임 변경사항을 커밋합니다.

    gpg::SnapshotManager::CommitResponse commitResponse =
        service_->Snapshots().CommitBlocking(metadata, metadata_change, SetupSnapshotData());
    

    data 매개변수에는 저장 중인 모든 게임 저장 데이터가 포함됩니다. 변경사항에는 시간과 같은 저장된 게임 메타데이터도 포함됩니다. 저장된 게임의 설명이 표시됩니다.

커밋 작업이 성공적으로 완료되면 플레이어는 저장된 게임 선택 UI에서 저장된 게임을 변경할 수도 있습니다.