面向 C++ 的 Play 游戲服務使用入門

來源: Google Developers
作者:Google Developers
時間:2020-12-10
16799
Google Play游戲服務C++SDK提供了可與Google Play游戲服務配合使用的C++API,專為已有C++游戲?qū)崿F(xiàn)的開發(fā)者而設計。

f4a222aa685f8e18c3a2233ca1b4efbc215eda37.jpg

注意:要下載最新版Google Play游戲服務C++SDK,請參閱SDK下載頁面。

Google Play游戲服務C++SDK提供了可與Google Play游戲服務配合使用的C++API,專為已有C++游戲?qū)崿F(xiàn)的開發(fā)者而設計。

該SDK目前實現(xiàn)了以下服務:

·授權(quán)

·成就

·排行榜

·回合制多人游戲

·實時多人游戲

·活動和任務

·游戲存檔

·附近連接(僅限Android)

·玩家統(tǒng)計信息

概念

大體上講,您需要執(zhí)行以下步驟來使用SDK:

1.為Android設置平臺配置。

2.使用GameServices::Builder配置和構(gòu)建一個GameServices對象。GameServices對象會自動嘗試登錄,并通過OnAuthActionFinished()回調(diào)返回結(jié)果。記下回調(diào)所返回的結(jié)果。如果自動登錄嘗試失敗,您可以顯示一個按鈕供用戶手動登錄。

3.收到OnAuthActionFinished()結(jié)果后,您可以使用GameServices對象及其子對象管理器來進行Play游戲服務調(diào)用,包括:

·登錄(授權(quán)失敗后):StartAuthorizationUI()

·解鎖成就:Achievements().Unlock()

·使用內(nèi)置界面顯示成就:Achievements().ShowAllUI()

·提交最高得分:Leaderboards().SubmitScore()

·退出:SignOut()

4.當您使用完GameServices對象時,請將其重置或銷毀。

詳細來說,您需要執(zhí)行以下步驟:

1.初始化平臺配置:這是一個包含平臺特定初始化信息的對象。在Android上,平臺配置包含Java虛擬機和指向當前Activity的指針:

//In android_main(),create a platform configuration

//and bind the object activity.

//Alternately,attach the activity in JNI_Onload().

gpg::AndroidPlatformConfiguration platform_configuration;

platform_configuration.SetActivity(state->activity->clazz);

2.構(gòu)建一個GameServices對象:該對象是Google Play游戲服務功能的主要入口點。使用GameServices::Builder創(chuàng)建GameServices實例。

在大多數(shù)實現(xiàn)中,只要您的C環(huán)境持續(xù)存在,給定GameServices對象就會持續(xù)存在;在Android Activity暫停和恢復時,您無需重新初始化該對象。

//Creates a GameServices object that has lambda callbacks.

game_services_=gpg::GameServices::Builder()

.SetDefaultOnLog(gpg::LogLevel::VERBOSE)

.SetOnAuthActionStarted([started_callback](gpg::AuthOperation op){

is_auth_in_progress_=true;

started_callback(op);

})

.SetOnAuthActionFinished([finished_callback](gpg::AuthOperation op,

gpg::AuthStatus status){

LOGI("Sign in finished with a result of%d",status);

is_auth_in_progress_=false;

finished_callback(op,status);

})

.Create(pc);

3.使用管理器類來管理GameServices對象。管理器可通過GameServices實例訪問,用于將相關功能集合在一起,例如成就管理器和排行榜管理器。它們本身不含用戶可見狀態(tài)。管理器由引用返回,所含的GameServices實例可控制其生命周期。您的客戶端絕不應保留管理器引用,而應保留GameServices實例。

管理器通過常量值類型的對象返回數(shù)據(jù)。這些值可一致地反映執(zhí)行查詢所對應時刻的基礎數(shù)據(jù)情況。

//Submit a high score

game_services_->Leaderboards().SubmitScore(leaderboard_id,score);

//Show the default Achievements UI

game_services_->Achievements().ShowAllUI();

4.當您使用完GameServices對象后,通過以下方式進行清理:在擁有該對象的unique_ptr上調(diào)用reset(),或者在超出使用期限后讓unique_ptr自動銷毀它。

線程模型

除非另有說明,否則所有GameServices和管理器方法都擁有線程安全異步實現(xiàn)。它們可在任何線程上調(diào)用,無需外部鎖定,并且執(zhí)行順序與其調(diào)用順序一致。

訪問器方法(讀取狀態(tài)的方法)具有兩種主要變體。第一種方法(名稱類似FetchProperty())以異步方式將其結(jié)果提供給所提供的回調(diào);第二種方法(名稱類似FetchPropertyBlocking())以同步方式將其結(jié)果返回給調(diào)用線程。

//Blocking callback

gpg::AchievementManager::FetchAllResponse fetchResponse=

game_services_->Achievements().FetchAllBlocking(std::chrono::milliseconds(1000));

//Non-blocking callback

game_services_->Achievements().FetchAll(gpg::DataSource::CACHE_OR_NETWORK,

[](gpg::AchievementManager::FetchAllResponse response){

LogI("Achievement response status:%d",response.status);});

所有用戶回調(diào)均在一個專用回調(diào)線程上調(diào)用。該線程可能不同于“主線程”或“界面線程”的任何平臺概念。您還應盡力確保用戶回調(diào)能快速執(zhí)行;回調(diào)線程停止可能會引起用戶可見問題(例如,注銷請求延遲完成)。

平臺特定信息

要開始在Android上使用Play游戲C++SDK,請繼續(xù)閱讀快速入門指南。

深入閱讀

務必閱讀Google Play游戲服務C++SDK自帶的類文檔以了解更多詳情,并查看演示SDK使用方法的示例。

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于Google Developers,本站不擁有所有權(quán),不承擔相關法律責任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
掃碼登錄
打開掃一掃, 關注公眾號后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號登錄/注冊
個人VIP
小程序
快出海小程序
公眾號
快出海公眾號
商務合作
商務合作
投稿采訪
投稿采訪
出海管家
出海管家