Kaydedilmiş Oyunları Oyununuza Ekleme

Bu rehberde, oyuncuların oyundaki ilerleme durumu verilerini Kaydedilmiş Oyunlar hizmetini kolayca yükleyebilirsiniz. Bunu kullanabilirsiniz herhangi bir noktada oyuncunun oyundaki ilerlemesini otomatik olarak yükleyip kaydetmek için hizmet dikkat edin. Bu hizmet, oyuncuların bir kullanıcıyı tetiklemesini arayüzünü kullanarak mevcut bir kaydedilmiş oyunu güncelleyin veya geri yükleyin ya da yeni bir tane oluşturun.

Başlamadan önce

Henüz yapmadıysanız Kayıtlı oyunlarla ilgili kavramlar.

Saved Games API'yi kullanarak kod yazmaya başlamadan önce:

Veri biçimleri ve platformlar arası uyumluluk

Google'ın sunucularına kaydettiğiniz Kayıtlı Oyunlar verileri şurada olmalıdır: std::vector<uint8_t> biçimindedir. Kodlama işlemini Saved Games hizmeti halleder Platformlar arası uyumluluk için verileriniz; Android uygulamaları şunları okuyabilir: bayt dizisiyle aynı verileri sunar.

Verileriniz için veri biçimi seçerken platforma özgü biçimler kullanmaktan kaçının Kaydedilmiş Oyunlar verileri. Şuna benzer bir veri biçimi kullanmanızı kesinlikle öneririz: Birden çok platformda güçlü kitaplık desteğine sahip XML veya JSON dosyası.

Kaydedilmiş Oyunlar hizmetini etkinleştirme

Kaydedilmiş Oyunlar hizmetini kullanabilmeniz için önce şunlara erişimi etkinleştirmeniz gerekir: somut olarak ortaya koyar. Bunu yapmak için hizmeti şununla oluşturduğunuzda EnableSnapshots() çağırın: gpg::GameServices::Builder. Bu işlem, ek kimlik doğrulama kapsamlarını etkinleştirir Kaydedilmiş Oyunlar tarafından bir sonraki kimlik doğrulama etkinliğinde zorunlu tutulabilir.

Kaydedilmiş Oyunlar Gösteriliyor

Oyununuzda oyuncuların oyunu kaydetmek veya oyunda Kaydedilmiş oyunları geri yükle. Oyuncular bu seçeneği belirlediğinde, oyununuzun ve oyuncuların oyuna ekleme ve satın alma işlemi yapmalarına bu yuvalardan birine kaydetme veya bu yuvalardan yükleme yapma ya da yeni bir kaydedilmiş oyun oluşturma. Şunu kullanın: bunun için aşağıdaki yöntemi uygulayın:

  SnapshotManager::ShowSelectUIOperation(...)

Kaydedilen Oyunlar seçim kullanıcı arayüzü, oyuncuların yeni bir kaydedilmiş oyun oluşturmalarını, kaydedilmiş mevcut oyunlarla ilgili ayrıntıları görüntülemelerini, ve önceki kaydedilmiş oyunları yükleyin.

  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);
}

Aşağıdaki örnekte, varsayılan Saved Games kullanıcı arayüzünün nasıl açılacağı gösterilmektedir ve oynatıcının kullanıcı arayüzü seçimini işleyin:

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

Yukarıdaki örnekte ALLOW_CREATE_SNAPSHOT değeri true ve MAX_SNAPSHOTS ise kullanıcının şu anda sahip olduğu gerçek anlık görüntü sayısından daha fazladır anında, varsayılan Genel Görünüm kullanıcı arayüzünde, oyunculara yeni bir veya oyunu kaydetme seçeneğini test edin. (Görüntülendiğinde düğme , kullanıcı arayüzünün alt kısmındadır.) Oyuncu bu düğmeyi tıkladığında SnapshotSelectUIResponse yanıtı geçerli ancak veri içermiyor.

Kaydedilmiş oyunları açma ve okuma

Kayıtlı bir oyuna erişmek ve içeriğini okumak veya değiştirmek için önce açın SnapshotMetadata nesnesini temsil eder. Ardından, SnapshotManager::Read*() yöntemini çağırın.

Aşağıdaki örnekte, kaydedilmiş bir oyunun nasıl açılacağı gösterilmektedir:

  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);
          …
        }

Veri çakışmalarını tespit etme ve çözme

Bir SnapshotMetadata nesnesini açtığınızda Kaydedilmiş Oyunlar hizmeti, çakışan bir kaydedilmiş oyun olup olmadığını kontrol edin. Veriler kaydedildiğinde veri çakışmaları Oyuncunun yerel cihazında depolanan oyunun uzak sürümle senkronize olmaması Google'ın sunucularında saklanır.

Kayıtlı bir oyunu açarken belirttiğiniz çakışma politikası, Kaydedilenler'de Oyun hizmeti: Veri çakışmasının otomatik olarak nasıl çözüldüğünü gösterir. Politika aşağıdakilerden biri olabilir:

Çatışma Politikası Açıklama
SnapshotConflictPolicy::MANUAL Kaydedilmiş Oyunlar hizmetinin hiçbir işlem yapmaması gerektiğini belirtir çözüm işlemi olabilir. Bunun yerine oyununuz, özel birleştirme.
SnapshotConflictPolicy::LONGEST_PLAYTIME Kaydedilmiş Oyunlar hizmetinin en yüksek oynama süresi değerine sahip olan kaydedilmiş bir oyundur.
SnapshotConflictPolicy::BASE_WINS Kaydedilmiş Oyunlar hizmetinin temeli seçmesi gerektiğini belirtir kaydedilmiş oyun.
SnapshotConflictPolicy::REMOTE_WINS Kaydedilmiş Oyunlar hizmetinin uzaktan kumandayı seçmesi gerektiğini belirtir kaydedilmiş oyun. Uzak sürüm, kaydedilen kopyanın Oyuncunun cihazlarından birinde algılanan ve daha yeni bir oyuna sahip olan temel sürümden daha yüksek bir zaman damgası içerir.

GPGSnapshotConflictPolicyManual dışında bir çakışma politikası belirttiyseniz Kaydedilmiş Oyunlar hizmeti, kaydedilmiş oyunu birleştirip güncellenmiş sürümü döndürecek elde edilen SnapshotManager::OpenResponse değerine dönüştürülür. Oyununuz açılabilir oyuna yazın, oyuna yazın ve SnapshotManager::Commit(...) komutunu çağırın. kaydetme yöntemini kullanabilirsiniz.

Özel birleştirme işlemi gerçekleştirme

Çakışma politikası olarak SnapshotConflictPolicy::MANUAL öğesini belirttiyseniz daha fazla performans gösterebilmek için oyununuz tespit edilen tüm veri çakışmalarını çözmelidir Kaydedilen oyundaki okuma veya yazma işlemleri.

Bu durumda, bir veri çakışması algılandığında hizmet, SnapshotManager::OpenResponse aracılığıyla aşağıdaki parametreleri uygulayın:

  • Bu çakışmayı benzersiz bir şekilde tanımlamak için bir conflict_id (bu değeri kullanacaksınız kaydedilen oyunun son sürümünü taahhüt etme ;
  • Kaydedilen oyunun çakışan temel sürümü ve
  • Kaydedilen oyunun çakışan uzak sürümü.

Oyununuz hangi verilerin kaydedileceğine karar vermeli, ardından Nihai sonucu kaydetmek/çözmek için SnapshotManager::ResolveConflictBlocking() yöntemi sürümünü de yükleyebilirsiniz.

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

Kaydedilmiş oyunlar yazma

Kayıtlı bir oyunu yazmak için önce SnapshotMetadata nesnesini açın tespit edilen veri uyuşmazlıklarını çözer, ardından Search Ads 360'ı Kaydettiklerinizi kaydetmek için SnapshotManager::Commit() yöntemi değişiklik gösterir.

Aşağıdaki örnekte bir değişikliği nasıl oluşturabileceğiniz ve kaydedilmiş oyun.

  1. İlk olarak, düzenlemek istediğiniz anlık görüntüyü açın ve tüm çakışmaların olduğundan emin olun. temel alınarak belirlenir.

    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. Daha sonra, kapak resmi:

    gpg::SnapshotMetadataChange::Builder builder;
    gpg::SnapshotMetadataChange metadata_change =
        builder.SetDescription("CollectAllTheStar savedata")
                 .SetCoverImageFromPngData(pngData).Create();
    
  3. Son olarak, kaydedilen oyun değişikliklerini uygulayın.

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

    Veri parametresi, depoladığınız tüm oyun kaydı verilerini içerir. Bu değişiklik, zaman gibi kaydedilmiş ek oyun meta verilerini de içerir kaydedilen oyun için bir açıklama ekleyin.

Kaydetme işlemi başarıyla tamamlanırsa oyuncular Kaydedilmiş Oyunlar seçim arayüzündeki kayıtlı oyun.