注意:要下載最新版Google Play游戲服務(wù)C++SDK,請(qǐng)參閱SDK下載頁面。
Google Play游戲服務(wù)C++SDK提供了可與Google Play游戲服務(wù)配合使用的C++API,專為已有C++游戲?qū)崿F(xiàn)的開發(fā)者而設(shè)計(jì)。
該SDK目前實(shí)現(xiàn)了以下服務(wù):
·授權(quán)
·成就
·排行榜
·回合制多人游戲
·實(shí)時(shí)多人游戲
·活動(dòng)和任務(wù)
·游戲存檔
·附近連接(僅限Android)
·玩家統(tǒng)計(jì)信息
概念
大體上講,您需要執(zhí)行以下步驟來使用SDK:
1.為Android設(shè)置平臺(tái)配置。
2.使用GameServices::Builder配置和構(gòu)建一個(gè)GameServices對(duì)象。GameServices對(duì)象會(huì)自動(dòng)嘗試登錄,并通過OnAuthActionFinished()回調(diào)返回結(jié)果。記下回調(diào)所返回的結(jié)果。如果自動(dòng)登錄嘗試失敗,您可以顯示一個(gè)按鈕供用戶手動(dòng)登錄。
3.收到OnAuthActionFinished()結(jié)果后,您可以使用GameServices對(duì)象及其子對(duì)象管理器來進(jìn)行Play游戲服務(wù)調(diào)用,包括:
·登錄(授權(quán)失敗后):StartAuthorizationUI()
·解鎖成就:Achievements().Unlock()
·使用內(nèi)置界面顯示成就:Achievements().ShowAllUI()
·提交最高得分:Leaderboards().SubmitScore()
·退出:SignOut()
4.當(dāng)您使用完GameServices對(duì)象時(shí),請(qǐng)將其重置或銷毀。
詳細(xì)來說,您需要執(zhí)行以下步驟:
1.初始化平臺(tái)配置:這是一個(gè)包含平臺(tái)特定初始化信息的對(duì)象。在Android上,平臺(tái)配置包含Java虛擬機(jī)和指向當(dāng)前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)建一個(gè)GameServices對(duì)象:該對(duì)象是Google Play游戲服務(wù)功能的主要入口點(diǎn)。使用GameServices::Builder創(chuàng)建GameServices實(shí)例。
在大多數(shù)實(shí)現(xiàn)中,只要您的C環(huán)境持續(xù)存在,給定GameServices對(duì)象就會(huì)持續(xù)存在;在Android Activity暫停和恢復(fù)時(shí),您無需重新初始化該對(duì)象。
//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對(duì)象。管理器可通過GameServices實(shí)例訪問,用于將相關(guān)功能集合在一起,例如成就管理器和排行榜管理器。它們本身不含用戶可見狀態(tài)。管理器由引用返回,所含的GameServices實(shí)例可控制其生命周期。您的客戶端絕不應(yīng)保留管理器引用,而應(yīng)保留GameServices實(shí)例。
管理器通過常量值類型的對(duì)象返回?cái)?shù)據(jù)。這些值可一致地反映執(zhí)行查詢所對(duì)應(yīng)時(shí)刻的基礎(chǔ)數(shù)據(jù)情況。
//Submit a high score
game_services_->Leaderboards().SubmitScore(leaderboard_id,score);
//Show the default Achievements UI
game_services_->Achievements().ShowAllUI();
4.當(dāng)您使用完GameServices對(duì)象后,通過以下方式進(jìn)行清理:在擁有該對(duì)象的unique_ptr上調(diào)用reset(),或者在超出使用期限后讓unique_ptr自動(dòng)銷毀它。
線程模型
除非另有說明,否則所有GameServices和管理器方法都擁有線程安全異步實(shí)現(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)均在一個(gè)專用回調(diào)線程上調(diào)用。該線程可能不同于“主線程”或“界面線程”的任何平臺(tái)概念。您還應(yīng)盡力確保用戶回調(diào)能快速執(zhí)行;回調(diào)線程停止可能會(huì)引起用戶可見問題(例如,注銷請(qǐng)求延遲完成)。
平臺(tái)特定信息
要開始在Android上使用Play游戲C++SDK,請(qǐng)繼續(xù)閱讀快速入門指南。
深入閱讀
務(wù)必閱讀Google Play游戲服務(wù)C++SDK自帶的類文檔以了解更多詳情,并查看演示SDK使用方法的示例。