Aan de slag met Google Play Games-services

Gaming-technologieën evolueren voortdurend. Desalniettemin zijn veel van de kern gameplay-elementen tientallen jaren onveranderd gebleven. Topscores, scoreborden, speurtochten, prestaties en ondersteuning voor meerdere spelers zijn voorbeelden. Als u een game voor het Android-platform ontwikkelt, hoeft u geen van die elementen handmatig te implementeren. U kunt in plaats daarvan eenvoudig de API's voor Google Play-gameservices gebruiken.

In deze zelfstudie laat ik je zien hoe je een eenvoudig Android-spel maakt, Google Play-gameservices toevoegt en de leaderboards en prestaties-API's gebruikt.

voorwaarden

Als je deze zelfstudie wilt kunnen volgen, heb je het volgende nodig:

  • De nieuwste versie van Android Studio.
  • Een Android-apparaat waarop de nieuwste versie van de Google Play-services-app is geïnstalleerd.

1. Maak een eenvoudig spel

Het is niet leuk om de Play Games-services-API's toe te voegen aan een leeg Android Studio-project. Laten we daarom nu een spel maken waarbij de gebruiker punten krijgt door simpelweg op een knop te klikken. Om precies te zijn, het doel van het spel is om binnen 60 seconden zo vaak mogelijk op een knop te klikken.

Stap 1: maak de lay-out van het spel

De lay-out van de game heeft er een Knop widget, waarop de gebruiker klikt om punten te verdienen, en twee Tekstweergave widgets om de score en de resterende tijd weer te geven. Als je ze allemaal in een Relatieve layout en centreer ze zowel horizontaal als verticaal, je zou een lay-outbestand moeten hebben dat er zo uitziet:

  

Onze game heeft een scorebordscherm en een achievements-scherm. Als u de gebruiker naar die schermen wilt laten navigeren, voegt u er nog twee toe Knop widgets aan het einde van het lay-outbestand.

Merk op dat beide knoppen hebben bij klikken attributen. We zullen de Java-methoden waarnaar ze verwijzen in latere stappen maken.

Stap 2: Implementeer de Game Logic

Maak binnen de activiteit lidvariabelen voor de gameplay-widgets die we hebben gedefinieerd in het XML-lay-outbestand. Maak daarnaast een int variabele voor de score en een boolean variabele voor de status van het spel.

private Button mainButton; privé TextView scoreView; private TextView timeView; privé int score = 0; private boolean playing = false;

Initialiseer de widgets in de activiteit's onCreate () methode met behulp van de findViewById () methode.

mainButton = (Button) findViewById (R.id.main_button); scoreView = (TextView) findViewById (R.id.score_view); timeView = (TextView) findViewById (R.id.time_view);

Om te luisteren naar klikken op de Knop widget, maak en voeg een toe OnClickListener ernaar toe.

mainButton.setOnClickListener (nieuwe View.OnClickListener () @Override public void onClick (View v) // Meer code gaat hier);

We moeten nu de volgende vereisten implementeren:

  • De eerste keer dat de gebruiker op de knop klikt, moet het spel starten.
  • Elke volgende klik zou de. Moeten verhogen partituur veranderlijk.
  • Het spel moet eindigen als 60 seconden zijn verstreken.

We kunnen de gebruiken spelen variabele om onderscheid te maken tussen de eerste klik en alle volgende klikken. Om de tijd bij te houden, kunnen we het abstract gebruiken CountDownTimer klasse, die ideaal is voor onze eisen. Het heeft een onTick () methode binnen, die nauwkeurig kan worden bijgewerkt timeView om het aantal resterende seconden weer te geven. Het heeft ook een onFinish () methode, die wordt aangeroepen wanneer het aftellen is voltooid.

Voeg daarom de volgende code toe aan de bij klikken() methode:

if (! playing) // De eerste klik spelen = true; mainButton.setText ("Blijf klikken"); // Initialiseer CountDownTimer naar 60 seconden nieuwe CountDownTimer (60000, 1000) @Override public void onTick (long millisUntil Finished) timeView.setText ("Resterende tijd:" + millisUntilFinished / 1000);  @Override public void onFinish () playing = false; timeView.setText ("Game over"); mainButton.setVisibility (View.GONE);  .start (); // Start de timer else // Daaropvolgende klikken scoren ++; scoreView.setText ("Score:" + score + "punten"); 

Op dit punt kun je het project uitvoeren om het spel te spelen.

2. Voeg Afhankelijkheden Gameservices toe

Het configureren van een project om API's voor Play-gameservices te gebruiken, omvat een groot aantal stappen. Door de Firebase-assistent van Android Studio te gebruiken, kunt u enkele ervan automatiseren.

Open het assistent-venster door naar Hulpmiddelen> Firebase. Vervolgens, in de Analytics sectie, klik op de Log een Analytics-evenement link. U kunt nu uw Android Studio-project verbinden met een Firebase-project door op de. Te klikken Aansluiten naar Firebase knop. Zorg ervoor dat u de Maak een nieuw Firebase-project optie in het dialoogvenster dat verschijnt.

Nadat de verbinding tot stand is gebracht, drukt u op Voeg Analytics toe aan uw app om alle vereiste wijzigingen toe te voegen aan de build.gradle bestanden.

U moet de afhankelijkheid voor gameservices handmatig toevoegen. Ga daarom naar de build.gradle bestand van de app module en voeg het volgende toe compileren afhankelijkheid:

compileren 'com.google.android.gms: play-services-games: 9.8.0'

Verder hebben de API's voor gameservices een XML-configuratiebestand nodig. Maak een opgeroepen spelletjes-ids.xml binnen in de res / waardes map. In een latere stap voegen we er inhoud aan toe.

3. Registreer het spel

Alle games die Google Play-gameservices gebruiken, moeten zijn geregistreerd op de Play-ontwikkelaarsconsole. Je moet een eenmalige registratiekost van $ 25 betalen om toegang te krijgen tot de console.

Klik in de console op het gamepad-pictogram om het te openen Game Services scherm.

Klik vervolgens op de Google Play-gameservices instellen om het spel te registreren.

Selecteer het tweede tabblad in het dialoogvenster dat verschijnt. Onze game maakt namelijk al gebruik van Google API's. U moet nu de naam van uw Firebase-project in de lijst met beschikbare projecten kunnen zien. Nadat je het hebt geselecteerd, kies je een categorie voor het spel. Voor nu kun je gaan met de toevallig categorie.

Nadat u op hebt gedrukt Doorgaan met, u kunt Firebase Analytics en Play-gameservices koppelen door op de Link Firebase knop.

Ga vervolgens naar de Gekoppelde apps sectie om uw Android Studio-project te koppelen aan de Play-ontwikkelaarsconsole. In het dialoogvenster dat verschijnt, drukt u op Android knop en typ de pakketnaam van uw project in de Verpakkingsnaam veld-.

druk de Opslaan en doorgaan om een ​​client-ID voor uw spel te genereren.

Onze game is nu succesvol geregistreerd bij de ontwikkelaarsconsole van Google Play.

4. Voeg een testgebruiker toe

De Play-gameservices-API's werken alleen als uw game is gepubliceerd op Google Play. Om u echter in staat te stellen uw spel te testen, kunt u in de ontwikkelaarsconsole enkele testgebruikersaccounts koppelen. Door naar de testen sectie, kunt u testgebruikersaccounts toevoegen of verwijderen. Zorg ervoor dat u hier het Google-account dat u op uw telefoon of emulator gebruikt, toevoegt.

5. Maak een leaderboard

Een leaderboard is niets anders dan een scherm met de hoogste scores van gebruikers. Leaderboards voor gameservices bieden gebruikers de mogelijkheid hun dagelijkse, wekelijkse en allerhoogste scores te bekijken.

Een scorebord maken op de Play-ontwikkelaarsconsole duurt slechts een paar klikken. Ga naar de leaderboards sectie en druk op de Voeg scorebord toe knop. In het volgende scherm geeft u een betekenisvolle naam aan het scorebord en drukt u op Opslaan knop.

Ons leaderboard is nu klaar.

6. Maak een prestatie

Prestaties zijn in-game awards die gebruikers krijgen voor het beheren van iets speciaals te doen. Een game met veel achievements om te ontgrendelen is meestal leuker dan een game die dat niet doet. Daarom hebben de meeste populaire games op Google Play vandaag tientallen, zo niet honderden successen.

In deze zelfstudie voegen we slechts één prestatie toe aan onze game. De naam zal zijn Bliksemsnel, en het wordt ontgrendeld wanneer de gebruiker erin slaagt om de knop meer dan 100 keer in een minuut aan te raken. Om de prestatie te creëren, gaat u naar Prestaties sectie en druk op de Prestatie toevoegen knop. Nadat u de naam en de beschrijving van de prestatie hebt ingevoerd, drukt u op Opslaan knop.

7. Werk de spelconfiguratie-XML bij

Zowel het klassement als de prestatie hebben unieke identificatiegegevens. We moeten nu die ID's toevoegen aan ons Android Studio-project, samen met de applicatie-ID die werd gegenereerd tijdens de registratie. U kunt dit doen door het bijwerken van de spelletjes-ids.xml bestand dat we eerder hebben gemaakt. Ik raad u echter aan de automatisch gegenereerde configuratiecode die beschikbaar is in de ontwikkelaarsconsole te gebruiken.

Als u de automatisch gegenereerde configuratiecode wilt ophalen, gaat u naar de Prestaties sectie of de leaderboards sectie en druk op de Krijg hulpbronnen link. U ziet een XML-code die er als volgt uitziet:

   1234567890 com.tutsplus.mylittlegame HzkA4Kz04F8MRYIAze HzkA4Kz04F8MRYIBVU 

Kopieer alle code en plak deze in uw project spelletjes-ids.xml het dossier.

8. Maak verbinding met Play Games Services

Voordat we de scoreborden en prestatie-API's kunnen gebruiken, moeten we een GoogleApiClient bijvoorbeeld en koppel het aan Games-services afspelen. Voeg daarom een ​​toe GoogleApiClient object als een ledvariabele van uw activiteit.

We moeten de GoogleApiClient.Builder klasse om het te bouwen GoogleApiClient aanleg. Tijdens het bouwen van de client kunnen we de API- en API-scope specificeren waarin we geïnteresseerd zijn door de addApi () en addScope () methoden. 

Bovendien, stel ik voor dat u de enableAutoManage () methode om ervoor te zorgen dat de client automatisch de verbinding met de gameservices beheert. De methode heeft echter een OnConnectionFailedListener, die wordt gebeld wanneer de verbinding mislukt. Voor nu bellen we gewoon de af hebben() methode om de app te sluiten in geval van een verbindingsfout.

Voeg daarom de volgende code toe aan het begin van de onCreate () methode:

apiClient = new GoogleApiClient.Builder (this) .addApi (Games.API) .addScope (Games.SCOPE_GAMES) .enableAutoManage (this, new GoogleApiClient.OnConnectionFailedListener () @Override public-nietig onConnectionFailed (@NonNull ConnectionResult connectionResult) Log.e (TAG, "Kan geen verbinding maken met Play-gameservices"); finish ();). Build ();

Als u de app nu uitvoert, wordt u gevraagd om een ​​Gamer-ID voor uzelf te maken. Typ een Gamer-ID naar keuze en druk op Aanmelden knop.

9. Gebruik het Leaderboard

Het indienen van een score op het leaderboard neemt slechts één regel code in beslag. Het enige wat u hoeft te doen is bellen met de submitScore () methode van de Games.Leaderboards klasse. EENs zijn argumenten, het verwacht de GoogleApiClient bijvoorbeeld de ID van het scorebord en de score.

In onze game moeten we de score aan het einde van de 60 seconden indienen. Voeg daarom de volgende code toe aan de onFinish () methode:

Games.Leaderboards.submitScore (apiClient, getString (R.string.leaderboard_my_little_leaderboard), score);

Als u het scorebord wilt bekijken, moeten we een nieuwe activiteit starten met een intentie in het klassement. Als u de intentie van het leaderboard wilt ophalen, belt u het getLeaderboardIntent () methode van de Games.Leaderboards klasse en sla de GoogleApiClient instantie en leaderboard ID ernaar toe.

De lay-out van onze game heeft al een knop die kan worden ingedrukt om het scorebord te openen. De waarde van zijn bij klikken kenmerk is showLeaderboard. Voeg daarom de volgende code toe aan uw activiteit:

public void showLeaderboard (View v) startActivityForResult (Games.Leaderboards.getLeaderboardIntent (apiClient, getString (R.string.leaderboard_my_little_leaderboard)), 0); 

U kunt de app nu uitvoeren en de game opnieuw spelen. Deze keer, wanneer het spel afgelopen is, wordt je score voorgelegd aan het leaderboard. Dit is hoe het standaard leaderboard eruit ziet:

10. Gebruik de prestatie

Door de unlock () methode van de Games.Achievements klas, je kunt elke prestatie ontgrendelen. De methode verwacht de GoogleApiClient instantie en de ID van de prestatie als enige argumenten.

De bliksemsnelle prestatie die we in de console hebben gedefinieerd, moet worden ontgrendeld wanneer de score van de gebruiker 100 punten overschrijdt. Voer daarom direct na de code om de score te verhogen de volgende code in:

if (score> 100) Games.Achievements .unlock (apiClient, getString (R.string.achievement_lightning_fast)); 

De code die nodig is om de achievements-schermen weer te geven, lijkt veel op de code die we hebben geschreven om het leaderboard-scherm weer te geven. Het enige dat u hoeft te doen, is de retourwaarde van de getAchievementsIntent () methode om de startActivityForResult () methode.

public void showAchievements (View v) startActivityForResult (Games.Achievements .getAchievementsIntent (apiClient), 1); 

Als u uw app uitvoert en de game opnieuw speelt, wordt een prestatie weergegeven wanneer uw score voor de eerste keer 100 punten overschrijdt.

Conclusie

U weet nu hoe u de API's voor Google Play-gameservices in uw Android Studio-project moet gebruiken. Gameservices spelen zijn niet alleen beperkt tot het Android-platform. Ze kunnen net zo gemakkelijk worden gebruikt op zowel het web als op iOS-platforms. Dus met gamespellen kunt u platformonafhankelijke spellen maken en gebruikers op verschillende platforms consistente spelervaringen bieden.

Als u meer wilt weten over de API's voor Google Play-gameservices, kunt u hun officiële handleidingen raadplegen of, nog beter, een aantal van onze handleidingen hier bekijken op Envato Tuts+!