SDK iOS Réalisations et classements dans le Game Center - Partie 2

Bienvenue dans la deuxième et dernière partie de la série de tutoriels de Game Center. Dans ce tutoriel, nous allons intégrer les réalisations et les tableaux de bord créés avec iTunesConnect lors de la première partie avec Objective-C et Xcode..

Étape 1: Construire l'interface

Avant de commencer avec Interface Builder, nous avons d’abord défini la nécessité de configurer certains points de vente et actions. Ouvrir Game_CenterViewController.h et modifiez le code pour lire comme suit:

 #importation  #importation  #import "GameCenterManager.h" @class GameCenterManager; @interface Game_CenterViewController: UIViewController  GameCenterManager * gameCenterManager; int64_t currentScore; NSString * currentLeaderBoard; IBOutlet UILabel * currentScoreLabel;  @property (nonatomic, keep) GameCenterManager * gameCenterManager; @property (nonatomic, assign) int64_t currentScore; @property (nonatomic, keep) NSString * currentLeaderBoard; @property (nonatomic, keep) UILabel * currentScoreLabel; - réinitialisation (IBAction); - (IBAction) showLeaderboard; - (IBAction) montrentRéalisations; - (IBAction) submitScore; - (IBAction) augmentationScore; - (vide) checkAchievements; @fin

Premièrement, nous importons le framework GameKit et le GameCenterManager classe. Ensuite, nous déclarons le GameCenterManager classe, afin que nous puissions déclarer une instance de cette classe dans le @interface. Après cela, nous déclarons les délégués suivants:

    яя я
  • UIActionSheetDelegate (utiliser une fiche d'action)
  • GKLeaderboardViewControllerDelegate (pour afficher le classement dans notre application)
  • GKAchievementViewControllerDelegate (pour montrer les réalisations dans notre application)
  • GameCenterManagerDelegate (pour utiliser le délégué GameCenterManager)

dans le @interface nous déclarons certaines instances et ensuite nous créons des actions. Appuyez sur CMD + S pour enregistrer le projet..

Dans le? Game Center? dossier dans le? Navigateur de projet? cliquer sur Game_centerViewController.xib.

Sélectionnez le Vue fenêtre et choisissez le fond que vous préférez. J'ai choisi "Couleur de fond texturée". Drag 5? Round Rect Badges? du Bibliothèque au vue. Nommez-les et arrangez-les comme indiqué ci-dessous. Faites également glisser 2? Étiquettes? du Bibliothèque au vue. Nommez le premier? Score actuel :? et supprimer le texte de la deuxième étiquette.

яя я

Sélectionnez? Propriétaire du fichier? et ouvrez le Inspecteur de connexions.

яя я

Connectez les actions aux boutons associés, en les faisant glisser vers les boutons et sélectionnez? Touch Up Inside? du menu.

яя я яя я

Faites glisser le? CurrentScoreLabel? sortie à l'étiquette sans texte et maintenant nous en avons terminé avec l'interface.

Étape 2: Modifier AppSpecificValues.h

Ouvrir AppSpecificValues.h et modifiez le code pour lire comme suit:

 // ID de catégorie du classement #define kLeaderboardID @ "1" // ID de réussite #define kAchievementOneTap @ "1_Tap" #define kAchievement20Taps @ "20_Taps"

Ici, nous créons les constantes pour notre classement et nos réalisations. Comme vous pouvez le constater, les identifiants sont les mêmes que ceux créés dans iTunes Connect..

Étape 3: Éditez Game_CenterViewController.m

Premièrement, nous allons synthétiser nos instances et les libérer. Nous importons également les? AppSpecificValues? et? GameCenterManager? Des classes. Tellement ouvert Game_CenterViewController.m et modifiez le code en haut de la page comme suit:

 #import "Game_CenterViewController.h" #import "AppSpecificValues.h" #import "GameCenterManager.h" @implementation Game_CenterViewController @synthesize gameCenterManager; @synthesize currentScore; @ synthétiser currentLeaderBoard; @synthesize currentScoreLabel;

Maintenant, modifiez le viewDidUnload et dealloc méthodes comme suit:

 - (void) viewDidUnload [super viewDidUnload]; // Libère les sous-vues conservées de la vue principale. // par exemple. self.myOutlet = nil; self.gameCenterManager = nil; self.currentLeaderBoard = nil; self.currentScoreLabel = nil;  - (void) dealloc [version de gameCenterManager]; [release currentLeaderBoard]; [version actuelle du label]; [super dealloc]; 

Étape 4: Connexion à Game Center

Faites défiler jusqu'à la? ViewDidLoad? méthode, déconseillez-le et modifiez le code comme suit:

 - (void) viewDidLoad [super viewDidLoad]; self.currentLeaderBoard = kLeaderboardID; self.currentScore = 0; if ([GameCenterManager isGameCenterAvailable]) self.gameCenterManager = [[[GameCenterManager alloc] init] autorelease]; [self.gameCenterManager setDelegate: self]; [self.gameCenterManager authenticateLocalUser];  else // Le périphérique actuel ne prend pas en charge Game Center. 

Nous avons d’abord défini notre tableau de classement actuel sur notre tableau de bord créé dans iTunes Connect. Après cela, nous définissons notre currentscore à 0. Votre meilleur score dans Game Center ne sera pas réglé à zéro, car il ne soumettra que des scores plus élevés que le précédent. Ensuite, nous vérifions si Game Center est disponible sur l'appareil sur lequel l'application est en cours d'exécution. Si Game Center est disponible, nous authentifions l'utilisateur local. Si Game Center n'est pas disponible, rien ne se passe. Vous pouvez dire à l'utilisateur que Game Center n'est pas disponible avec une alerte, mais je le laisse avec un commentaire..

Vous pouvez maintenant tester votre projet. Appuyez sur CMD + R pour le construire et l'exécuter. Vous recevrez des avertissements, mais l'application s'exécutera. Si vous êtes déjà connecté à Game Center, vous obtenez le message suivant: Bienvenue, "Nom du Game Center". Si vous n'êtes pas connecté à Game Center, vous obtenez un affichage d'alerte avec les options permettant de créer un nouveau compte, de vous connecter à un compte existant ou d'annuler. Si vous annulez le classement et les réalisations ne fonctionneront pas, car vous n'êtes pas connecté à Game Center. Les boutons ne fonctionneront pas, car nous n'avons pas effectué les actions dans Xcode.

яя я

Étape 5: Affichage des classements et des réalisations

Si vous avez utilisé le simulateur, fermez-le et revenez à Xcode. Ajoutez le code suivant sous le viewDidLoad méthode:

 - (IBAction) showLeaderboard GKLeaderboardViewController * leaderboardController = [[GKLeaderboardViewController alloc] init]; if (leaderboardController! = NULL) leaderboardController.category = self.currentLeaderBoard; leaderboardController.timeScope = GKLeaderboardTimeScopeWeek; leaderboardController.leaderboardDelegate = self; [self presentModalViewController: leaderboardController animé: OUI];  - (void) leaderboardViewControllerDidFinish: (GKLeaderboardViewController *) viewController [auto-licenciementModalViewControllerAnimated: YES]; [version de viewController];  - (IBAction) showAchievement GKAchievementViewController * réalisations = [[GKAchievementViewController alloc] init]; si (réalisations! = NULL) réalisations.achievementDelegate = self; [self presentModalViewController: réalisations animées: YES];  - (void) executionViewControllerDidFinish: (GKAchievementViewController *) viewController; [auto-licenciementModalViewControllerAnimated: YES]; [version de viewController]; 

Ici, nous créons les actions pour montrer le classement et les réalisations. Nous créons également 2 méthodes pour revenir en arrière. La première action consiste à montrer le classement. Comme vous pouvez le constater, timeScope est réglé sur GKLeaderboardTimeScopeWeek. Cela signifie que la section de classement est définie sur "Cette semaine". Il y a 3 délais et ils sont simples:

    яя я
  • GKLeaderboardTimeScopeToday
  • GKLeaderboardTimeScopeWeek
  • GKLeaderboardTimeScopeAllTime

Si vous générez et exécutez à nouveau le? Show Leaderboard? et? Afficher les réalisations? les boutons fonctionneront. Vous pouvez maintenant voir les réalisations que nous avons créées, ainsi que les descriptions associées et les valeurs en points. Comme vous pouvez le constater, la section Leaderbord est "This Week". En modifiant la portée temporelle dans Xcode, vous pouvez définir la section par défaut sur? Tout le temps? ou? aujourd'hui ?. Le classement dit "Pas de scores", car nous n'avons jamais soumis de score pour ce classement. Cliquez sur Terminé pour rejeter la vue Game Center.

яя я

Étape 6: Gérer le score et les réalisations

Ajoutez le code suivant sous le code que nous venons de créer:

 - (IBAction) augmentationScore self.currentScore = self.currentScore + 1; currentScoreLabel.text = [NSString stringWithFormat: @ "% ld", self.currentScore]; [auto-vérification des réalisations]; 

Ici, nous créons une action pour augmenter votre currentScore. Nous mettons également à jour notre étiquette avec le currentScore et appelons le vérifierRéalisations fonctionner pour voir si nous avons réalisé un exploit.

 - (void) checkAchievements NSString * identifiant = NULL; double pourcentageComplete = 0; commutateur (self.currentScore) cas 1: identifiant = kAchievementOneTap; pourcentage de complétion = 100,0; Pause;  cas 5: identifiant = kAchievement20Taps; pourcentage de complétion = 25,0; Pause;  cas 10: identifiant = kAchievement20Taps; pourcentage de complétion = 50,0; Pause;  cas 15: identifiant = kAchievement20Taps; pourcentage de complétion = 75,0; Pause;  cas 20: identifiant = kAchievement20Taps; pourcentage de complétion = 100,0; Pause;  if (identificateur! = NULL) [self.gameCenterManager submitAchievement: identificateur percentComplete: percentComplete]; 

Dans cette fonction, nous cherchons si nous avons atteint un objectif avec une instruction switch.
Nous créons d’abord un NSString et un double pour stocker nos valeurs. Dans l'instruction switch, nous vérifions si le currentscore est égal à 1, 5, 10, 15 ou 20. Après cette instruction, nous regardons s'il y a quelque chose de stocké dans la chaîne NSString que nous avons créée. S'il y avait quelque chose stocké dans cette chaîne NSString, nous soumettons la réalisation. Nous soumettons également un exploit si vous l'avez complété en partie. Par exemple, si vous avez tapé 10 fois sur le bouton, vous avez mangé 50% des 20 prises? réussite.

Nous souhaitons également soumettre un score élevé, ajoutez donc les actions suivantes dans le code que nous venons de créer:

 - (IBAction) submitScore if (self.currentScore> 0) [self.gameCenterManager reportScore: self.currentScore pour la catégorie: self.currentLeaderBoard]; 

Ici, nous vérifions si le score est supérieur à 0, car nous ne voulons pas qu'un score de 0 soit soumis. Nous avons soumis notre currentScore pour notre currentLeaderboard.

Générez et exécutez l'application à nouveau et maintenant vous pouvez augmenter votre score et l'envoyer. Si vous cliquez 15 fois sur le bouton et que vous allez sur? Afficher les réalisations? vous pouvez voir que vous avez atteint le? 1 Tap? et sont sur 75% des? 20 robinets? réussite. La description de? 1 Tapez sur? La réalisation a également changé dans le texte que nous avons donné lorsqu’il a été gagné dans iTunes Connect. Fermez la vue des réalisations et cliquez sur «Soumettre le score» après avoir cliqué sur «Afficher Leaderbaord». Maintenant, vous voyez votre score (si votre currentScore était supérieur à 0).

яя я

Étape 7: Réinitialiser le score et les réalisations

dd le code suivant sous le code que nous venons de créer:

 - (IBAction) reset UIActionSheet * actionSheet = [[UIActionSheet alloc]] initWithTitle: @ "Êtes-vous sûr de vouloir réinitialiser votre score et vos performances?" délégué: auto annulerButtonTitle: @ "Annuler" destructiveButtonTitle: @ "réinitialiser" otherButtonTitles: nil]; [actionSheet showInView: [auto view]]; [version actionSheet]; 

Ici, nous avons créé une feuille d’action dans l’action de réinitialisation. Nous plaçons le délégué sur "soi" parce que nous voulons faire quelque chose si vous avez cliqué sur le bouton? réinitialiser? bouton.

Sous le? Réinitialiser? action ajoute le code suivant:

 - (void) actionSheet: (UIActionSheet *) actionSheet clickedButtonAtIndex: (NSInteger) buttonIndex if (buttonIndex == 0) [gameCenterManager resetAchievements]; self.currentScore = 0; currentScoreLabel.text = [NSString stringWithFormat: @ "% ld", self.currentScore]; 

Dans ce code, nous cherchons le bouton sur lequel vous avez cliqué. Vous ne pouvez pas modifier? Annuler? bouton donc nous commençons à un boutonIndex de 0. Si vous avez cliqué sur le bouton? Réinitialiser? bouton de la feuille d’action, le gameCenterManager réinitialise vos succès, le currentScore est mis à 0 et nous mettons à jour le texte currentScoreLabel.

Étape 8: Avertir l'utilisateur du succès obtenu

Ajoutez le code suivant sous le code que nous venons de créer:

 - (void) accomplissementSoumis: (GKAchievement *) ach error: erreur (NSError *) error; if ((error == NULL) && (ach! = NULL)) if (ach.percentComplete == 100.0) UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "Achievement Earned!" message: (@ "% @", ach.identifier) ​​délégué: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [émission d'alerte]; [libération d'alerte];  else // Echec de la soumission aux réalisations. 

Nous vérifions d'abord s'il n'y a pas eu d'erreur et s'il y a quelque chose de stocké dans "ach". Si cela est vrai, nous vérifions si ach.presentComplete vaut 100.0, car nous souhaitons uniquement envoyer un message à l'utilisateur s'il a obtenu un exploit et non s'il est à 50% d'un exploit..
Si cela est vrai, nous montrons à l'utilisateur qu'il a remporté un exploit avec une vue alerte. Nous réglons la délégation à néant de cette vue d'alerte, car nous n'en avons pas besoin, nous utilisons uniquement le bouton d'annulation..

S'il y a eu une erreur ou s'il n'y a rien stocké dans ach, vous pouvez alors donner à l'utilisateur un message l'informant de l'échec de la soumission, mais je le laisse avec un commentaire..

Construire et exécuter pour terminer le tutoriel. Pour vérifier si le bouton de réinitialisation et la vue d'alerte fonctionnent, cliquez sur le bouton? Réinitialiser les réalisations et le score? bouton. Ensuite, augmentez le score et une vue d'alerte devrait montrer.

яя я

Si vous avez obtenu les deux exploits et que vous fermez l'application et supprimez-le si, dans la barre multitâche, currentScore est remis à 0, car nous n'avons pas stocké cette valeur. Si vous augmentez le score ou si les applications pensent que vous avez gagné? 1 Appuyez sur? réalisation à nouveau, mais vous l'avez déjà mérité. Si vous voulez que cela se produise, vous pouvez enregistrer la valeur currentScore.

Merci d'avoir lu ce tutoriel sur le Game Center. Si vous avez des questions ou des commentaires sur ce didacticiel, laissez-les dans la section commentaires ci-dessous ou envoyez-moi un mail à [email protected]