Comment faire un jeu de plateforme comme Super Mario Brothers && num; 8211 & semi; Partie 2

Advertisement

Si vous êtes nouveau ici, vous pouvez vous abonner à mon flux RSS ou suivez-moi sur Twitter. Merci de votre visite!

Comment faire un jeu de plateforme comme Super Mario Brothers && num; 8211 & semi;  Partie 2


Apprenez à créer un jeu comme Super Mario!

Il s'agit d'un post de blog par iOS Tutorial Team membre Jacob Gundersen, un développeur de jeux indépendant qui dirige le blog Indie Ambitions. Découvrez sa dernière application - Factor Samurai!

Bienvenue à notre série de tutoriels en 2 parties sur la création d'un jeu comme Super Mario!

Dans la première partie de la série, vous avez appris comment créer un moteur de physique simple, basé sur les tuiles qui contrôle comment le héros de votre jeu, Koalio, se déplace dans son monde.

Dans cette deuxième et dernière partie de la série, vous apprendrez comment faire Koalio courir et sauter - la partie amusante du jeu!

Vous allez également ajouter des collisions avec ces planchers effrayants spikey, gérer gagner et perdre, et bien sûr ajouter quelques effets sonores gratuits et de la musique!

Cette deuxième partie est plus simple (et plus courte) que le premier tutoriel, une récompense pour le dur travail que vous avez mis la dernière fois! Alors, tournez votre mojo de codage, et profitez-en!

Déménagement Koalio Around

Les contrôles que vous allez mettre en œuvre sont très simples. Il n'y aura que des contrôles de saut et de saut, tout comme le 1-bit Ninja. Si vous touchez la moitié gauche de l'écran, Koalio se précipite vers l'avant. Toucher la moitié droite de l'écran fera sauter Koalio.

Tu m'as bien compris - Koalio ne peut pas reculer! Les Koalas véritables ne reculent pas devant le danger.

Puisque Koalio sera déplacé vers l'avant par l'utilisateur, plutôt que par GameLevelLayer, vous aurez besoin de certaines valeurs que vous pouvez vérifier dans la classe Player pour mettre à jour sa vitesse vers l'avant. Ajoutez les propriétés suivantes à la classe Player (n'oubliez pas de synthétiser!):

En Player.h:

  @property (nonatomic, assign) BOOL forwardMarch;  @property (nonatomic, assign) BOOL peutAsWellJump; 

En Player.m:

  @synthesize forwardMarch = _forwardMarch, mightAsWellJump = _mightAsWellJump; 

Maintenant , ajoutez les méthodes tactile manipulations suivantes à l'GameLevelLayer:

  - (void) ccTouchesBegan: (NSSet *) touche avecEvent: (UIEvent *) event {for (UITouch * t en touch) {CGPoint touchLocation = [auto convertTouchToNodeSpace: t];  If (touchLocation.x> 240) {player.mightAsWellJump = YES;  } Else {player.forwardMarch = OUI;  }} - (void) ccTouchesMoved: (NSSet *) touche avecEvent: (UIEvent *) event {for (UITouch * t en touch) {CGPoint touchLocation = [auto convertTouchToNodeSpace: t];  // obtenez le contact précédent et le convertis vers l'espace du noeud CGPoint previousTouchLocation = [t previousLocationInView: [t view]];  CGSize screenSize = [[CCDirector sharedDirector] winSize];  PreviousTouchLocation = ccp (previousTouchLocation.x, screenSize.height - previousTouchLocation.y);  If (touchLocation.x> 240 && previousTouchLocation.x <= 240) {player.forwardMarch = NO;  Player.mightAsWellJump = OUI;  } Else if (previousTouchLocation.x> 240 && touchLocation.x <= 240) {player.forwardMarch = YES;  Player.mightAsWellJump = NO;  }} - (void) ccTouchesEnded: (NSSet *) touche avecEvent: (UIEvent *) event {for (UITouch * t en touch) {CGPoint touchLocation = [auto convertTouchToNodeSpace: t];  If (touchLocation.x <240) {player.forwardMarch = NO;  } Else {player.mightAsWellJump = NON;  ...... 

Ces changements devraient être assez simples. Si l'utilisateur crée un événement tactile dont la coordonnée X est inférieure à 240 (la moitié de l'écran), vous activez le booléen forwardMarch du lecteur. Dans le cas contraire (si l'emplacement de l'événement tactile est supérieur à 240), il suffit d'activer le booléen de la ligne de commande.

TouchesMoved est un peu plus compliqué, parce que vous voulez seulement retourner les valeurs booléennes ci-dessus si le toucher passe au milieu de l'écran, donc vous devez calculer l'emplacement previousTouch ainsi. Autre que cela, vous êtes juste vérifier pour voir quelle direction le toucher croise et en tournant le booléen approprié sur ou hors tension. Enfin, si l'utilisateur cesse de toucher un côté de l'écran ou l'autre, vous voulez désactiver la valeur booléenne appropriée.

Il ya quelques changements qui doivent être faits pour détecter les touches. Tout d' abord, ajoutez cette ligne init:

  Self.isTouchEnabled = OUI; 

Vous devez activer le multitouch en AppDelegate.m ( de manière à détecter une touche qui dirige le joueur à aller de l' avant et de sauter en même temps). Ajoutez la ligne suivante avant la [director_ pushScene: [scène GameLevelLayer]]; ligne:

  [GlView setMultipleTouchEnabled: OUI]; 

Maintenant que vous passez les touches à vos booléens de classe de joueur, vous pouvez ajouter du code à la méthode de mise à jour pour que Koalio puisse se déplacer. Commencez par le mouvement vers l'avant. Changer la méthode de mise à jour dans Player.m à ce qui suit:

  - (void) mise à jour: (ccTime) dt {CGPoint gravité = ccp (0,0, -450,0);  CGPoint gravityStep = ccpMult (gravité, dt);  CGPoint forwardMove = ccp (800,0, 0,0);  CGPoint forwardStep = ccpMult (forwardMove, dt);  // 1 self.velocity = ccpAdd (self.velocity, gravityStep);  Self.velocity = ccp (self.velocity.x * 0.90, self.velocity.y);  // 2 if (self.forwardMarch) {self.velocity = ccpAdd (self.velocity, forwardStep);  } // 3 CGPoint minMovement = ccp (0,0, -450,0);  CGPoint maxMovement = ccp (120,0, 250,0);  Self.velocity = ccpClamp (self.velocity, minMovement, maxMovement);  // 4 CGPoint stepVelocity = ccpMult (self.velocity, dt);  Self.desiredPosition = ccpAdd (self.position, stepVelocity);  } 

Répartissez section par section:

  1. Vous ajoutez une force forwardMove qui entrera en jeu pendant que l'utilisateur touche l'écran. Pour rappel, vous calculez cette force (800 points par seconde) à la valeur appropriée pour l'intervalle de temps (dt) de l'image courante afin d'obtenir une accélération constante.
  2. Ici, vous appliquez une force d'amortissement à la vitesse horizontale pour simuler la friction. Vous appliquez la physique ici comme vous l'avez fait avec la gravité. Dans chaque cadre, une force de déplacement supplémentaire sera appliquée.

    Lorsque la force est retirée, vous voulez que le joueur s'arrête, mais pas immédiatement. Ici vous appliquez un amortissement 0.90; En d'autres termes, la réduction de la force horizontale globale de deux pour cent chaque trame.

  3. Dans la section trois, vous vérifiez le boolean (signifiant que l'écran est touché) et ajoutez la force forwardMove si approprié.
  4. Dans la section quatre, vous appliquez le serrage. Cela limite la vitesse de déplacement maximale du joueur à la fois dans les directions horizontale (vitesse de pointe), de montée (vitesse de saut) et de descente (chute).
    Ces valeurs d'amortissement et de serrage limitent la rapidité avec laquelle les choses se produisent dans le jeu. Il empêche également l'accumulation de problème de vitesse que vous avez rencontré dans la première partie du didacticiel.

    Vous voulez que le joueur ait une vitesse maximale et d'atteindre cette vitesse dans une seconde ou moins. De cette façon, les mouvements de votre joueur se sentent encore naturel, et fournir un niveau de contrôle. La force maximale que vous autoriserez est une valeur positive de 120, qui serait un quart de la largeur de l'écran par seconde.

    Si vous souhaitez augmenter le taux d'accélération de votre lecteur, augmentez la variable forwardMove et la valeur d'amortissement 0.90 respectivement. Si vous souhaitez augmenter la vitesse maximale de votre lecteur, augmentez simplement la valeur 120. Vous coupez également la vitesse de saut à 250 et la vitesse de chute à 450.

Construire et exécuter. Vous devriez être en mesure de faire Koalio exécuter en avant en appuyant sur la moitié gauche de l'écran. Regarde que Koala va!

Comment faire un jeu de plateforme comme Super Mario Brothers && num; 8211 & semi;  Partie 2

Ensuite, vous le ferez sauter!

Votre Mac le fera ... Sauter, sauter!

Le saut est la caractéristique distinctive du jeu de plateforme, et l'élément qui mène à la plupart du plaisir. Vous voulez vous assurer que le mouvement de saut est fluide et se sent bien. Dans ce tutoriel, vous allez mettre en œuvre l'algorithme de saut utilisé dans Sonic the Hedgehog, comme décrit ici.

Ajouter ce qui suit à la méthode de mise à jour avant la si (self.forwardMarch) {line:

  CGPoint jumpForce = ccp (0,0, 310,0);  If (self.mightAsWellJump && self.onGround) {self.velocity = ccpAdd (self.velocity, jumpForce);  } 

Si vous arrêtez ici (allez-y et construisez et courez si vous voulez), vous obtiendrez la vieille école Atari sauter. Chaque saut sera la même hauteur. Vous appliquez une force au joueur, et attendez que la gravité le retire.

Dans les jeux de plates-formes modernes, les utilisateurs ont beaucoup plus de contrôle sur le saut. Vous voulez contrôlable, complètement irréaliste (mais amusant comme l'enfer) Mario Bros / Sonic capacités de saut où vous pouvez changer les directions air milieu et même arrêter un saut court.

Pour ce faire, vous devez ajouter le composant variable. Il ya quelques façons de le faire, mais vous le feriez de la manière Sonic. Réglez l'algorithme de saut pour réduire la force de la poussée vers le haut si l'utilisateur cesse de presser l'écran. Remplacer le code ci-dessus par ce qui suit:

  CGPoint jumpForce = ccp (0,0, 310,0);  Float jumpCutoff = 150,0;  If (self.mightAsWellJump && self.onGround) {self.velocity = ccpAdd (self.velocity, jumpForce);  } Else if (! Self.mightAsWellJump && self.velocity.y> jumpCutoff) {self.velocity = ccp (self.velocity.x, jumpCutoff);  } 

Ce code effectue une étape supplémentaire. Dans le cas où l'utilisateur cesse de presser l'écran (self.mightAsWellJump deviendra NO), il vérifiera la vitesse ascendante du lecteur. Si cette valeur est supérieure à la valeur de coupure, elle positionnera la vitesse sur la valeur de coupure.

Cela réduit efficacement le saut. De cette façon, vous obtiendrez toujours un saut minimum (au moins aussi élevé que le sautCutoff), mais si vous continuez à tenir, vous obtiendrez la pleine force de saut disponible.

Construisez et exécutez maintenant. Cela commence à se sentir comme un vrai jeu! À partir de ce moment, vous aurez probablement besoin de tester sur un périphérique réel (si vous ne l'avez pas déjà fait) afin d'utiliser les deux "boutons".

Comment faire un jeu de plateforme comme Super Mario Brothers && num; 8211 & semi;  Partie 2

Vous avez Koalio courir et sauter, mais finalement il va exécuter à partir de l'écran immobilier. Il est temps de réparer ça!

Ajouter ce bout de code du jeu tutoriel à base de tuiles à GameLevelLayer.m:

  - (void) setViewpointCenter: (CGPoint) position {CGSize winSize = [[CCDirector sharedDirector] winSize];  Int x = MAX (position.x, winSize.width / 2);  Int y = MAX (position.y, winSize.height / 2);  X = MIN (x, (map.mapSize.width * map.tileSize.width) - winSize.width / 2);  Y = MIN (y, (map.mapSize.height * map.tileSize.height) - winSize.height / 2);  CGPoint realPosition = ccp (x, y);  CGPoint centerOfView = ccp (winSize.width / 2, winSize.height / 2);  CGPoint viewPoint = ccpSub (centerOfView, actualPosition);  Map.position = viewPoint;  } 

Ce code fixe l'écran à la position du lecteur. Dans le cas où Koalio est au bord du niveau, il cesse de centrer sur lui, et serre le bord du niveau au bord de l'écran.

Il y a une modification ici du post original. Dans la dernière ligne, la carte est déplacée, au lieu de la couche. Cela est possible parce que le joueur est un enfant de la carte, donc quand le joueur se déplace à droite, la carte se déplace vers la gauche et le joueur reste au centre de l'écran.

Les méthodes tactiles reposent également sur une position dans la couche. Si vous avez déplacé votre calque à la place, vous devez prendre ces calculs en compte. C'est plus facile.

Pour une explication complète, reportez-vous au didacticiel du jeu basé sur les tuiles.

Vous avez besoin d'ajouter que l' appel à la méthode de mise à jour:

  [Self setViewpointCenter: player.position]; 

Construisez et exécutez maintenant. Vous pouvez naviguer Koalio à travers le niveau entier!

Comment faire un jeu de plateforme comme Super Mario Brothers && num; 8211 & semi;  Partie 2

L'Agonie de la Défaite

Maintenant, vous pouvez passer à la manipulation des scénarios de jeu gagnant et perdant.

Aborder le scénario de perte d'abord. Il ya des dangers placés dans ce niveau. Si le joueur entre en collision avec un danger, le jeu prendra fin.

Puisque ces tuiles sont fixes, vous devez les manipuler comme vous avez manipulé les collisions murales dans le didacticiel précédent. Cependant, au lieu de résoudre les collisions, vous allez mettre fin au jeu. Vous êtes à la maison maintenant - il ne reste que quelques choses à faire!

Ajoutez la méthode suivante à GameLevelLayer.m:

  - (void) handleHazardCollisions: (Joueur *) p {NSArray * tiles = [auto getSurroundingTilesAtPosition: p.position forLayer: hazard];  (NSDictionary * dic dans les tuiles) {CGRect tileRect = CGRectMake ([[dic objectForKey: @ "x"] floatValue], [[dic objectForKey: @ "y"] floatValue], map.tileSize.width, map.tileSize. la taille);  CGRect pRect = [p collisionBoundingBox];  If ([[dic objectForKey: @ "gid"] intValue] && CGRectIntersectsRect (pRect, tileRect)) {[auto gameOver: 0];  ...... 

Tout ce code devrait sembler familier, car il est copié et collé à partir de la méthode checkAndResolveCollisions. La seule méthode qui est nouvelle est gameOver. Cet appel prend un paramètre: 0 si le joueur a perdu, 1 si le joueur a gagné.

Vous utilisez la couche au lieu de la couche de murs de risques, de sorte que vous aurez besoin de mettre en place que dans le @interface au début du fichier de mise en œuvre comme un exemple CCTMXLayer variables * des dangers; . Réglez - le dans init (juste après la ligne d'installation de murs):

  Hazard = [layerNamed: @ "hazard"]; 

Une dernière chose que vous devez faire est d' appeler la méthode dans votre méthode de mise à jour:

  - (void) mise à jour: (ccTime) dt {[mise à jour du lecteur: dt];  [Self handleHazardCollisions: joueur];  [Auto checkForAndResolveCollisions: joueur];  [Self setViewpointCenter: player.position];  } 

Maintenant, si le joueur exécute dans n'importe quelle tuile de la couche de dangers, vous appelez gameOver. Cette méthode va juste vomir un bouton de redémarrage avec un message que vous avez perdu (ou gagné, selon le cas):

  - (void) gameOver: (BOOL) gagné {gameOver = OUI;  NSString * gameText;  If (won) {gameText = @ "Vous avez gagné!";  } Else {gameText = @ "Vous avez perdu!";  } CCLabelTTF * diedLabel = [[CCLabelTTF alloc] initWithString: gameText fontName: @ "Marker Felt" fontSize: 40];  DiedLabel.position = ccp (240, 200);  CCMoveBy * slideIn = [[CCMoveBy alloc] initWithDuration: 1.0 position: ccp (0, 250)];  CCMenuItemImage * replay = [[CCMenuItemImage alloc] initWithNormalImage: @ "replay.png" selectedImage: @ "replay.png" disabledImage: @ "replay.png" block: ^ (id sender) [CCDirector sharedDirector] replaceScene: [GameLevelLayer scène]];  }];  NSArray * menuItems = [NSArray arrayWithObject: replay];  CCMenu * menu = [[CCMenu alloc] initWithArray: menuItems];  Menu.position = ccp (240, -100);  [Self addChild: menu];  [Self addChild: diedLabel];  [Menu runAction: slideIn];  } 

La première ligne définit un nouveau booléen appelé gameOver. Vous utilisez cette valeur pour arrêter la méthode de mise à jour permettant au lecteur de continuer à se déplacer et d'interagir avec le niveau. Vous verrez cela dans une minute.

Ensuite, le code crée un libellé et attribue une chaîne selon que l'utilisateur a gagné ou perdu. Il crée également un bouton qui permet à l'utilisateur de recommencer.

Ces méthodes basées sur des blocs avec les objets CCMenu sont vraiment agréables à utiliser. Dans ce cas, vous venez de remplacer la scène par une nouvelle copie de lui-même afin de démarrer le niveau. Vous utilisez également CCAction, CCMoveBy, pour animer le bouton de relecture en place, juste pour le plaisir.

La seule autre chose que vous devez faire est d'ajouter le boolean gameOver à la classe GameLevelLayer. Cela peut être une variable d'instance, car vous n'aurez pas besoin d'y accéder en dehors des appels. Ajouter à la @interface au début de l'GameLevelLayer.m, ainsi que la variable que nous devons suivre la couche de murs:

  CCTMXLayer * risques;  BOOL gameOver; 

Modifier la méthode de mise à jour comme suit:

  - (void) mise à jour: (ccTime) dt {if (gameOver) {return;  } [Mise à jour du joueur: dt];  [Auto checkForAndResolveCollisions: joueur];  [Self handleHazardCollisions: joueur];  [Self setViewpointCenter: player.position];  } 

Allez-y et construisez et courez maintenant, et trouvez des pointes pour sauter dessus! Vous devriez voir quelque chose comme ceci:

Comment faire un jeu de plateforme comme Super Mario Brothers && num; 8211 & semi;  Partie 2

Ne répétez pas trop cela cependant, ou l'agence de protection des animaux pourrait venir après vous! ......

La fosse de l'enfer

Maintenant pour le scénario où Koalio tombe un trou. Dans ce cas, vous terminerez le jeu.

Comme le code est maintenant, il va planter. (Horrors!) Le code lance un TMXLayer: erreur de position non valide. C'est là que vous devez intervenir. Cela se produit dans la méthode getSurroundingTilesAtPosition: lorsque vous appelez tileGIDAt :.

Ajouter le code suivant dans GameLevelLayer.m, dans le getSurroundingTilesAtPosition: méthode, avant la tileGIDat: ligne;

  If (tilePos.y> (map.mapSize.height - 1)) {// tombé dans un trou [self gameOver: 0];  Return nil;  } 

Ce code exécute la routine gameOver et abandonne le processus de construction du tableau de mosaïque. Vous aurez également besoin d'abandonner le processus de boucle à travers les tuiles en checkForAndResolveCollisions. Après la NSArray * tuiles = [self getSurroundingTilesAtPosition: p.position forLayer: murs]; Ligne, ajoutez ce bloc de code:

  If (gameOver) {return;  } 

Vous allez abandonner cette boucle ainsi et éviter tout écrasement qui pourrait résulter d'essayer d'exécuter la routine avec un tableau incomplète.

Construisez et exécutez maintenant. Trouver une fosse pour sauter, et. . . Pas d'accident! Le jeu se termine comme il se doit.

Comment faire un jeu de plateforme comme Super Mario Brothers && num; 8211 & semi;  Partie 2

Gagnant!

Maintenant, manipulez le cas où votre héros Koalio gagne le jeu!

Comment faire un jeu de plateforme comme Super Mario Brothers && num; 8211 & semi;  Partie 2

Tout ce que vous allez faire est de surveiller la position X du joueur et de déclencher la condition de "victoire" quand il franchit le seuil (qui sera à la fin du niveau). Ce niveau est d'environ 3400 pixels de large. Vous allez déclencher une condition de «victoire» lorsque le joueur atteindra le pixel 3130.

Ajouter une nouvelle méthode dans GameLevelLayer.m comme suit:

  - (void) checkForWin {if (player.position.x> 3130.0) {[self gameOver: 1];  ...... 
  - (void) mise à jour: (ccTime) dt {[mise à jour du lecteur: dt];  [Self handleHazardCollisions: joueur];  [Vérification de soi];  [Auto checkForAndResolveCollisions: joueur];  [Self setViewpointCenter: player.position];  } 

Construisez et exécutez maintenant. Naviguez votre héros Koalio à travers le niveau, et si vous pouvez le faire à la fin, vous aurez ce message:

Comment faire un jeu de plateforme comme Super Mario Brothers && num; 8211 & semi;  Partie 2

Musique gratuite et effets sonores

Vous savez à quelle heure il est - le temps pour la musique gratuite et les effets sonores!

Let'd plonger droit dans elle. Ajouter cette au sommet de GameLevelLayer.m et Player.m:

  #import "SimpleAudioEngine.h" 

Puis ajouter cette ligne à la méthode init du GameLevelLayer.

  [[SimpleAudioEngine sharedEngine] playBackgroundMusic: @ "level1.mp3"]; 

Cela vous donne une belle musique de jeu. Merci à Kevin Macleod d'Incompetech.com pour avoir composé la musique (Brittle Reel). Il a des tonnes de musique sous licence CC là!

Maintenant ajoutez un son de saut. Accédez au Player.m et ajouter ce qui suit à la méthode de mise à jour dans le code de saut:

  If (self.mightAsWellJump && self.onGround) {self.velocity = ccpAdd (self.velocity, jumpForce);  [[SimpleAudioEngine sharedEngine] playEffect: @ "jump.wav"];  } Else if (! Self.mightAsWellJump && self.velocity.y> jumpCutoff) {self.velocity = ccp (self.velocity.x, jumpCutoff);  } 

Enfin, jouez un son quand Koalio tombe dans un trou ou quand il frappe un danger. Faites cela dans la méthode GameOver dans GameLevelLayer.m:

  - (void) gameOver {gameOver = OUI;  [[SimpleAudioEngine sharedEngine] playEffect: @ "hurt.wav"];  CCLabelTTF * diedLabel = [[CCLabelTTF alloc] initWithString: @ "Vous avez disparu!"  FontName: @ "Marker Felt" fontSize: 40];  DiedLabel.position = ccp (240, 200); 

Construisez et exécutez, et profitez de vos nouveaux morceaux groovy.

Et c'est tout. Vous avez écrit un jeu de plateforme. Toi. Sont. Génial!

Où aller en partant d'ici?

Voici le fichier de projet final avec tout le code du didacticiel.

Il y a beaucoup plus de choses qui auraient pu être couvertes: tout ce qui va des collisions ennemies et de l'IA, aux capacités de mouvement améliorées (glissière murale, double saut, etc.), aux lignes directrices de conception de niveau.

Et en parlant de cela ... une bonne nouvelle à ce sujet!

Le kit de démarrage de jeu Platformer

Je suis heureux d'annoncer que tout cela et bien d'autres encore seront inclus dans le kit de démarrage de jeu de plate-forme à venir! Voici une vidéo rapide vous montrant le jeu que vous ferez dans le Starter Kit:

Voici ce que vous apprendrez dans le kit de démarrage de jeu Platformer:

  • Comment gérer et charger plusieurs niveaux
  • Comment faire un écran de sélection de niveau défilable et déverrouillable
  • Comment intégrer les storyboards UIKit avec Cocos2D
  • Comment utiliser efficacement les feuilles de sprite, les animations, les tilesets et travailler avec pixel art!
  • Comment créer une machine d'état pour gérer les animations et les comportements de caractère / ennemi
  • Plus sur la façon de faire incroyable et amusant tuiles à base de moteurs de physique!
  • Comment créer un joystick à l'écran et HUD
  • Comment ajouter une assistance iCade
  • Conception de niveau pour plateformes
  • Comment construire l'IA ennemie et les comportements dynamiques.
  • Comment ajouter un combat EPIC Boss!
  • Entrevues avec les développeurs de plusieurs jeux de plateforme iOS avec astuces et astuces
  • . . . Et beaucoup, beaucoup plus!

Si vous êtes intéressé par le kit de démarrage de jeu Platformer, assurez-vous que vous êtes inscrit pour le bulletin mensuel de Ray - nous allons l'annoncer quand il sortira! ......

Mise à jour 08/04/13: Après une longue, le jeu Starter Kit Platformer est maintenant disponible! Vérifiez-le sur le magasin raywenderlich.com.

En attendant, n'oubliez pas les ressources recommandées à la fin de la partie 1 de ce didacticiel.

J'espère que vous avez apprécié votre physique et sont plus inspirés que jamais à construire votre propre jeu de plateforme!

Comment faire un jeu de plateforme comme Super Mario Brothers && num; 8211 & semi;  Partie 2

Il s'agit d'un post de blog par iOS Tutorial Team membre Jacob Gundersen, un développeur de jeux indépendant qui dirige le blog Indie Ambitions. Découvrez sa dernière application - Factor Samurai!