Este documento descreve como usar as conquistas dos serviços relacionados a jogos do Google Play em jogos em C++. Neste
documento, pressupomos que você tenha configurado o projeto conforme descrito em Configurar
os serviços relacionados a jogos do Google Play. A API Achievements pode ser encontrada na
PgsAchievementsClient.
Antes de começar
Caso ainda não tenha feito isso, recomendamos consultar os conceitos de conquistas no jogo.
Antes de começar a programar usando a API de conquistas:
Siga as instruções do guia Configurar os serviços relacionados a jogos do Google Play para instalar e configurar seu app para usar os serviços relacionados a jogos do Google Play.
Defina as conquistas que você quer que o jogo desbloqueie ou mostre seguindo as instruções do guia do Google Play Console.
Conheça melhor as recomendações descritas na Lista de verificação de qualidade.
Acessar um cliente de conquistas
Para começar a usar a API de conquistas, o jogo precisa ter um
objeto
PgsAchievementsClient. Para isso, chame o método
PgsAchievementsClient_create
e transmita a atividade.
Desbloquear conquistas
Para desbloquear uma conquista, chame o método
PgsAchievementsClient_unlock
e transmita o PgsAchievementsClient e o ID da conquista.
O snippet de código abaixo mostra como o app pode desbloquear conquistas:
// Example Usage void TriggerUnlock(PgsGamesClient* gamesClient) { // You must obtain the achievements client from the main games client PgsAchievementsClient* achievementsClient = PgsGamesClient_getAchievementsClient(gamesClient); // Replace with your actual Achievement ID from the Play Console const char* MY_ACHIEVEMENT_ID = "CgkI...sQw"; UnlockAchievement(achievementsClient, MY_ACHIEVEMENT_ID); }
Se a conquista for do tipo incremental (ou seja, várias etapas são
necessárias para o desbloqueio), chame PgsAchievementsClient_increment.
O snippet de código abaixo mostra como o app pode incrementar a conquista do jogador:
void IncrementMyAchievement(PgsAchievementsClient* client, const char* achievementId, uint32_t steps) { if (client == nullptr) { return; } // Call the API // Parameters typically include: // 1. Client handle // 2. Achievement ID (string) // 3. Number of steps to increment by (For example, 1) // 4. Callback function // 5. User context (passed to callback) PgsAchievementsClient_increment( client, achievementId, steps, OnIncrementCallback, (void*)achievementId // Pass ID as context so the callback knows which one finished ); } // Example Usage in Game Loop void OnEnemyDefeated(PgsGamesClient* gamesClient) { // Get the achievements client handle PgsAchievementsClient* achievementsClient = PgsGamesClient_getAchievementsClient(gamesClient); // ID from Google Play Console const char* ACH_ENEMY_KILLER = "CgkI...xyz"; // Increment by 1 step IncrementMyAchievement(achievementsClient, ACH_ENEMY_KILLER, 1); }
Você não precisa programar mais códigos para desbloquear a conquista. Os serviços relacionados a jogos do Google Play desbloqueiam a conquista automaticamente quando o jogo atinge o número necessário de etapas.
É recomendado definir os IDs de conquista no arquivo strings.xml para que
o jogo possa referenciar as conquistas por ID de recurso. Ao fazer chamadas para
atualizar e carregar conquistas, siga as
práticas recomendadas para evitar exceder sua
cota de APIs.
Mostrar conquistas
Para mostrar as conquistas de um jogador, chame
PgsAchievementsClient_showAchievementsUI.
O snippet de código abaixo mostra como o app pode exibir a interface padrão de conquistas do usuário.
void OnShowAchievementsUICallback(void* context, PgsError error) { if (error == PgsError_Success) { // The UI was displayed and closed successfully by the user. // You might resume your game loop here if it was paused. } else { // Handle error (For example,, user not signed in, UI failed to load). } } // Function to trigger the Achievements UI void ShowMyAchievements(PgsAchievementsClient* achievementsClient) { if (achievementsClient == nullptr) { // Log error: Client not initialized return; } // Call the API // Note: The specific arguments often include the client, a callback, and user_data. // Some versions might require the Android Activity or a Request Code as well. PgsAchievementsClient_showAchievementsUI( achievementsClient, OnShowAchievementsUICallback, // Callback function nullptr // Optional user data (context) passed to callback ); }
A imagem a seguir mostra um exemplo da interface padrão de conquistas: