सेव किए गए गेम को अपने गेम में जोड़ना

इस गाइड में, किसी खिलाड़ी की प्रोग्रेस का डेटा सेव और लोड करने का तरीका बताया गया है. C++ ऐप्लिकेशन में सेव किए गए गेम की सेवा. आप इसका इस्तेमाल कर सकते हैं किसी भी समय खिलाड़ी के गेम की प्रोग्रेस को अपने-आप लोड और सेव करने की सेवा को ट्रैक किया जा सकता है. इस सेवा की मदद से खिलाड़ी भी किसी उपयोगकर्ता को ट्रिगर कर सकते हैं इंटरफ़ेस का उपयोग करने की अनुमति है.

शुरू करने से पहले

अगर आपने अब तक ऐसा नहीं किया है, तो आपको समीक्षा करने में मदद मिल सकती है: सेव किए गए गेम के कॉन्सेप्ट.

सेव किए गए गेम के एपीआई का इस्तेमाल करके, कोड करने से पहले:

डेटा फ़ॉर्मैट और क्रॉस-प्लैटफ़ॉर्म के साथ काम करने की सुविधा

Google के सर्वर में सेव किया गया गेम का डेटा सेव किया गया होना चाहिए std::vector<uint8_t> फ़ॉर्मैट. सेव किए गए गेम की सेवा, कोड में बदलने का काम करती है अलग-अलग प्लैटफ़ॉर्म पर काम करने के लिए आपका डेटा; Android ऐप्लिकेशन इसमें पढ़े जा सकते हैं यही डेटा, क्रॉस-प्लैटफ़ॉर्म के साथ काम करने की समस्या के बिना बाइट कलेक्शन की तरह दिखता है.

अपने लिए डेटा फ़ॉर्मैट चुनते समय, प्लैटफ़ॉर्म के हिसाब से फ़ॉर्मैट का इस्तेमाल करने से बचें सेव किया गया गेम का डेटा. हमारा सुझाव है कि आप डेटा फ़ॉर्मैट का इस्तेमाल करें, जैसे एक्सएमएल या JSON, जो एक से ज़्यादा प्लैटफ़ॉर्म पर लाइब्रेरी की सुविधा देता है.

सेव किए गए गेम की सेवा चालू करना

सहेजे गए गेम सेवा का उपयोग करने से पहले, आपको पहले आपको इसकी ऐक्सेस सक्षम करनी होगी इसे. ऐसा करने के लिए, इनके साथ सेवा बनाते समय EnableSnapshots() पर कॉल करें gpg::GameServices::Builder. इससे, पुष्टि करने के अन्य दायरे चालू हो जाएंगे अगले पुष्टि इवेंट में सेव किए गए गेम के लिए ज़रूरी है.

सेव किए गए गेम दिखाए जा रहे हैं

अपने गेम में, एक ऐसा विकल्प दिया जा सकता है जिसे खिलाड़ी, सेव करने के लिए ट्रिगर कर सकें या सेव किए गए गेम को पहले जैसा करना. जब खिलाड़ी यह विकल्प चुनेंगे, तो आपके गेम को ऐसी स्क्रीन खोलें जिस पर सेव किए गए मौजूदा स्लॉट दिखते हों. साथ ही, खिलाड़ियों को इनमें से किसी एक स्लॉट में सेव करें या उससे लोड करें या नया सेव किया गया गेम बनाएं. इसका इस्तेमाल करें नीचे दिया गया तरीका अपनाएं:

  SnapshotManager::ShowSelectUIOperation(...)

सेव किए गए गेम चुनने का यूज़र इंटरफ़ेस (यूआई) अनुमति देता है कोई नया गेम बनाने के लिए खिलाड़ी, सेव किए गए मौजूदा गेम की जानकारी देखें, और पिछले सेव किए गए गेम लोड करें.

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

इस उदाहरण में, सेव किए गए गेम के डिफ़ॉल्ट यूज़र इंटरफ़ेस (यूआई) को लाने का तरीका बताया गया है और प्लेयर का यूआई चुना हुआ हैंडल करें:

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

अगर ऊपर दिए गए उदाहरण में, ALLOW_CREATE_SNAPSHOT, true और MAX_SNAPSHOTS है , उपयोगकर्ता के पास मौजूदा स्नैपशॉट की संख्या से ज़्यादा है बनाया गया है, तो डिफ़ॉल्ट स्नैपशॉट यूज़र इंटरफ़ेस (यूआई) से खिलाड़ियों को नया बनाने के लिए एक बटन मिलता है सेव करने का विकल्प होता है. (दिखाए जाने पर, बटन यूज़र इंटरफ़ेस में सबसे नीचे मौजूद होता है.) जब कोई खिलाड़ी इस बटन पर क्लिक करता है, 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 यह बताता है कि सेव किए गए गेम की सेवा को कोई परफ़ॉर्म नहीं करना चाहिए समस्या को हल करने के लिए किया जा सकता है. इसके बजाय, आपका गेम कस्टम मर्ज.
SnapshotConflictPolicy::LONGEST_PLAYTIME यह बताता है कि सेव किए गए गेम की सेवा को सबसे ज़्यादा वैल्यू वाला सेव किया गया गेम.
SnapshotConflictPolicy::BASE_WINS इससे पता चलता है कि सेव किए गए गेम की सेवा को बेस चुनना चाहिए सेव किए गए गेम.
SnapshotConflictPolicy::REMOTE_WINS इससे पता चलता है कि सेव किए गए गेम की सेवा को रिमोट चुनना चाहिए सेव किए गए गेम. रिमोट वर्शन, सेव की गई ऐसा गेम जिसका पता खिलाड़ी के किसी डिवाइस पर चला हो और जो हाल ही का हो बेस वर्शन की तुलना में टाइमस्टैंप.

अगर आपने GPGSnapshotConflictPolicyManual के अलावा कोई दूसरी विरोधाभास नीति तय की है, तो सेव किए गए गेम की सेवा, सेव किए गए गेम को मर्ज करेगी और अपडेट किया गया वर्शन दिखाएगी नतीजे के तौर पर SnapshotManager::OpenResponse वैल्यू का इस्तेमाल करेगा. आपका गेम खुल सकता है सेव किए गए गेम को सेव करें, उसे लिखें, फिर स्नैपशॉट मैनेजर को कॉल करें::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());
    

    डेटा पैरामीटर में, सेव किए गए गेम का पूरा डेटा शामिल होता है, जिसे आप सेव कर रहे हैं. इस बदलाव में, सेव किया गया अतिरिक्त गेम का मेटाडेटा भी शामिल है. जैसे, समय खेले गए गेम का ब्यौरा और सेव किए गए गेम का ब्यौरा.

अगर तय की गई कार्रवाई पूरी हो गई है, तो खिलाड़ी यह देख सकते हैं सेव किए गए गेम चुनने के यूज़र इंटरफ़ेस (यूआई) में सेव किए गए गेम.