Skip to content

📝 Blog

A La Découverte De Phaser - 4

Voici la suite de la traduction du tutoriel écrit par Alvin Ourad et Richard Davey.
Elle commence dans ce premier article
Puis se poursuit avec ce second article
Alors que le troisiĂšme article est lĂ 

Les Groupes

Les Groupes sont vraiment puissants. Comme leur nom l’indique, ils vous permettent de grouper ensemble des objets similaires et de les controler comme une seule entitĂ©. Il est aussi possible de calculer les collisions entre Groupes, et pour ce jeu, nous allons utiliser deux groupes diffĂ©rents, l’un deux sera créé par le code suivant pour les plateformes :

platforms = game.add.group();

Comme pour les Sprites , game.add crĂ©e un objet Group. Nous l’assignons Ă  une nouvelle variable locale appellĂ©e platforms. Une fois créé, nous pouvons lui ajouter des objets.
Tout d’abord, le sol. Il est positionnĂ© tout en bas de la zone de jeu et utilise l’image ‘ground’ chargĂ© auparavant. Le sol est ensuite mis Ă  l’échelle pour remplir la largeur de l’écran de jeu.
Pour terminer, nous postionnons la valeur de la propriĂ©tĂ© ‘immovable’ Ă  true (NdT: vrai). Si nous le faisions pas, le sol bougerait quand le joueur rentrerai en collision avec lui (plus de dĂ©tails Ă  ce sujet dans la rubrique Physique).

Une fois le sol en place, nous crééons 2 Ă©lĂ©ments plus petits pour sauter dessus en utilisant la mĂȘme technique que pour le sol.

Joueur Un PrĂȘt

Crééons une nouvelle variable locale appellĂ©e ‘player’ (NdT: nous traduirons le code plus tard si besoin) et ajoutons le code suivant Ă  la fonction create.
Vous pouvez lire ce code dans le fichier part5.html :

    // The player and its settings
    player = game.add.sprite(32, game.world.height - 150, 'dude');

    //  We need to enable physics on the player
    game.physics.arcade.enable(player);

    //  Player physics properties. Give the little guy a slight bounce.
    player.body.bounce.y = 0.2;
    player.body.gravity.y = 300;
    player.body.collideWorldBounds = true;

    //  Our two animations, walking left and right.
    player.animations.add('left', [0, 1, 2, 3], 10, true);
    player.animations.add('right', [5, 6, 7, 8], 10, true);

Cela va crĂ©er un nouveau Sprite appellĂ© ‘player’ , positionnĂ© aux coordonnĂ©es 32 pixels du bord gauche du jeu et 150 pixels Ă  partir du bas du jeu.
Nous indiquons d’utiliser la ressource ‘dude’ chargĂ© auparavant. Si vous allez voir la fonction preload , vous verrez que ‘dude’ a Ă©tĂ© chargĂ© en temps que feuille de Sprite , pas comme une image. Cela est du au fait qu’il contient les diffĂ©rentes images de l’animation.
Voici à quoi ressemble la feuille de Sprite dans son intégralité :

dude

Vous pouvez voir 9 frames au total (NdT : les frames sont comme de petites diapositives de chaque Ă©tape de l’animation), 4 reprĂ©sentant la course Ă  gauche, 1 qui fait face Ă  la camĂ©ra et 4 pour la course Ă  droite. Notez que Phaser est capable de gĂ©rer des Sprites par symĂ©trie pour gagner de la place dans les frames, mais pour la simplicitĂ© de ce tutoriel, nous conserverons l’approche Ă  l’ancienne.
Nous dĂ©finissons 2 animations appellĂ©es ‘left’ et ‘right’ (NdT : gauche et droite). L’animation ‘left’ utilisera les frames 0, 1, 2 et 3 Ă  la vitesse de 10 frames par seconde. Le paramĂštre true indique que l’animation se fera en boucle. Ce sera notre cycle standard de course et nous utiliserons une animation similaire pour la direction opposĂ©e.
Une fois les animations créées, occupons nous de quelques propriétés de physique.

Objet Body et Velocity : un monde de Physiques

Phaser propose une grande variété de systÚme de gestion de la physique. Il est fourni avec le systÚme Arcade Physics , le systÚme Ninja Physics et le systÚme P2.JS Full-Body Physics. (NdT : ce sont les noms que vous retrouverez dans la documentation).
Pour les besoins de ce tutoriel, nous allons utiliser le systÚme Arcade Physics , qui est à la fois simple et léger, un choix parfait pour les navigateurs mobiles.
Vous verrez dans le code que nous aurons Ă  dĂ©marrer le systĂšme de physique, puis pour chaque Sprite ou Group que nous voudrons gĂ©rer par ce systĂšme, nous devrons l’activer un Ă  un.

Une fois que cela est fait, chaque Sprite se retrouve avec une propriété body , qui est une instance de celui du systÚme ArcadePhysics. Cela représente le Sprite comme un corps physique dans le moteur Arcade Physics de Phaser.
L’objet body en lui mĂȘme possĂšde un certain nombre de propriĂ©tĂ©s avec lesquelles nous pourrons jouer. Pour simuler les effets de la gravitĂ© sur un Sprite , c’est aussi simple que d’écrire ce qui suit :

player.body.gravity.y = 300;

C’est une valeur arbitraire, mais logiquement, plus la valeur est Ă©levĂ©e, plus l’objet est lourd et plus vite il chute.
Si vous ajoutez ceci Ă  votre code ou si vous lancer le fichier part5.html , vous verrez le joueur tomber sans s’arrĂȘter, ce jusqu’au bas du monde du jeu, en ignorant le sol que nous avons créé auparavant :

part5

A bientĂŽt

VoilĂ , la suite expliquera comment faire pour que le joueur s’arrĂȘte au sol et comment le dĂ©placer avec le clavier.

Entre temps, ne soyez pas timides : laissez des commentaires ou écrivez moi et surtout amusez vous !

A La Découverte De Phaser - 3

Dans les arcanes de game.add.sprite , un nouvel objet Phaser.Sprite est créé et le sprite est ajoutĂ© au “monde du jeu”. Ce monde est l’endroit oĂč tous vos objets vont vivre, cela peut ĂȘtre comparĂ© Ă  un Stage de ActionScript3.

Note : Le monde de jeu n’a pas de taille fixe et s’étend Ă  l’infini dans toutes les directions, avec le point 0,0 au centre. Par commoditĂ©, Phaser positionne le 0,0 en haut et Ă  gauche de votre monde, mais vous pouvez le dĂ©placer Ă  l’aide de l’objet Camera intĂ©grĂ©.

La classe reprĂ©sentant le monde est accessible par l’objet game.world et est fournie avec un tas de mĂ©thodes et propriĂ©tĂ©s pratiques pour vous aider Ă  rĂ©partir vos objets au sein du monde.
Cela comprend quelques propriétés simples comme game.world.height , mais aussi certaines plus élaborées que nous utiliserons dans un autre tutoriel.

Pour le moment, construisons notre scĂšne en ajoutant un fond et des plate-formes.
Voici une version plus Ă  jour de la fonction create :

var platforms;

function create() {

    //  We're going to be using physics, so enable the Arcade Physics system
    game.physics.startSystem(Phaser.Physics.ARCADE);

    //  A simple background for our game
    game.add.sprite(0, 0, 'sky');

    //  The platforms group contains the ground and the 2 ledges we can jump on
    platforms = game.add.group();

    //  We will enable physics for any object that is created in this group
    platforms.enableBody = true;

    // Here we create the ground.
    var ground = platforms.create(0, game.world.height - 64, 'ground');

    //  Scale it to fit the width of the game (the original sprite is 400x32 in size)
    ground.scale.setTo(2, 2);

    //  This stops it from falling away when you jump on it
    ground.body.immovable = true;

    //  Now let's create two ledges
    var ledge = platforms.create(400, 400, 'ground');

    ledge.body.immovable = true;

    ledge = platforms.create(-150, 250, 'ground');

    ledge.body.immovable = true;

}

Si vous exĂ©cutez ce code, que vous trouverez dans le fichier part4.html du zip du tutoriel, vous devriez voir un Ă©cran qui ressemble un peu plus Ă  une scĂšne d’un jeu :

part4

La premiĂšre partie est identique Ă  ce que nous avions fait pour l’étoile, nous avons simplement changĂ© la clĂ© en ‘sky’ et cela a permis d’afficher notre ciel en fond d’écran Ă  la place.
C’est une image au format PNG de dimensions 800x600 qui remplit notre Ă©cran.

A bientĂŽt

VoilĂ , je vous laisse avec la traduction qui correspond Ă  la partie 4 et, comme promis, je continue au plus vite.

Entre temps, ne soyez pas timides : laissez des commentaires ou écrivez moi et surtout amusez vous !

A La Découverte De Phaser - 2

AprĂšs la petite introduction du pourquoi de ma traductionCette fois c’est parti : je traduirai au mieux, quitte Ă  adapter en Ă©crivant avec mes mots et en utilisant parfois NdT pour Note du Traducteur. Il est probable que j’utilise certains termes techniques anglais, ça n’a pas toujours de sens de tout traduire.

Faire un jeu avec Phaser

d’aprĂšs le tutoriel en anglais Ă©crit par Alvin Ourad et Richard Davey.
Original disponible en suivant ce lien

Bienvenue dans ce premier tutoriel sur Faire un Jeu avec Phaser (NdT : c’est moche comme ça non ? ;). Nous allons apprendre comment crĂ©er un petit jeu mettant en scĂšne un joueur courant et sautant sur des plateformes en collectant des Ă©toiles. Au cours de notre petit pĂ©riple, nous expliquerons quelques unes des fonctions au coeur de ce framework.

Qu’est ce que Phaser ?

Phaser est un framework de jeu HTML5 qui vise Ă  aider les dĂ©veloppeurs Ă  produire de jeux puissants, fonctionnants sur les navigateurs HTML5, de maniĂšre vraiment rapide et, au contraire d’autres, il a Ă©tĂ© conçu avec les navigateurs mobiles pour cible. Le seul prĂ©requis pour le navigateur est le support du tag canvas. Il emprunte beaucoup de choses Ă  Flixel.

Prérequis

  • TĂ©lĂ©chargez les fichiers de code et les ressources qui vont avec ce tutoriel.
  • Vous avez besoin de connaissances trĂšs trĂšs basiques de JavaScript. (NdT : mais chez TontonCodeur, on fera tout pour vous aider lĂ  dessus)
  • Prenez Ă©galement le temps de parcourir le Getting Started Guide, vous y apprendrez comment tĂ©lĂ©charger le framework, mettre en place un environnement de dĂ©veloppement, et vous donner un aperçu de la structure d’un projet Phaser et ses fonctionnalitĂ©s principales.

ATTENTION, ajout de la traduction: Je rĂ©flĂ©chis Ă  une solution vous permettant simplement de lancer le tutoriel et de manipuler ses fichiers. Entre temps, n’hĂ©sitez surtout pas Ă  me poser toutes les questions qui vous viendrons pendant ces installations.

Si vous avez suivi le Getting Started Guide, vous avez tĂ©lĂ©chargĂ© Phaser et tout installĂ© aux petits oignons : vous ĂȘtes prĂȘts Ă  coder. TĂ©lĂ©chargez les fichiers de ce tutoriel et dĂ©compressez les dans votre rĂ©pertoire web.

Ouvrez le fichier part1.html dans l’éditeur de texte de votre choix et allons regarder de plus prĂšs le code. AprĂšs un peu de blabla HTML qui inclus Phaser, la structure du code ressemble Ă  ceci :

var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });

function preload() {
}

function create() {
}

function update() {
}

La ligne 1 est celle qui donne vie Ă  Phaser en crĂ©ant une instance de l’objet Phaser.Game et en l’assignant Ă  une variable locale appelĂ©e ‘game’. L’appeler ‘game’ est une pratique usuelle, mais pas une obligation, et c’est ce que vous retrouverez dans les exemples de Phaser.

Les 2 premiers paramĂštres sont la largeur et la hauteur de l’élĂ©ment Canvas que Phaser va crĂ©er. Dans le cas prĂ©sent, 800 x 600 pixels. Le monde de votre jeu avoir la taille que vous souhaitez, mais il s’agit de la rĂ©solution dans laquelle le jeu sera affichĂ©.
Le troisĂšme paramĂštre peut valoir Phaser.CANVAS, Phaser.WEBGL ou Phaser.AUTO. Cela dĂ©finit le contexte de rendu que vous voulez utiliser. Le paramĂštre recommandĂ© est Phaser.AUTO puisqu’il permet de commencer par essayer Phaser.WEBGL, mais si le navigateur ou la machine ne le supporte pas, cela basculera automatiquement sur Phaser.CANVAS.

Le quatriĂšme paramĂštre est une chaine vide, c’est l’ID de l’élĂ©ment DOM dans lequel vous allez insĂ©rer l’élĂ©ment canvas que Phaser crĂ©e. Comme nous l’avons laissĂ© vide, il va simplement s’ajouter au corps de la page. Le dernier paramĂštre est un objet comportant quatre rĂ©fĂ©rences Ă  des fonctions principales de Phaser. Leur utilisation va vous ĂȘtre dĂ©taillĂ©e ci-aprĂšs. Notez que cet objet ‘game’ n’est pas absolument nĂ©cessaire : Phaser supporte un systĂšme en full state permettant de rĂ©partir le code dans des objets sĂ©parĂ©s bien plus clairs. Mais pour un simple Guide de DĂ©marrage comme celui ci, nous utiliserons cette approche qui nous permet de prototyper plus rapidement.

Chargement des ressources

Chargeons maintenant les ressources nécessaires à notre jeu. Vous faites ça en utilisant des appels à game.load au sein de la fonction appellée preload. Phaser cherchera automatiquement cette fonction à son lancement et chargera tout ce qui sera défini en son sein.

Pour le moment, la fonction preload est vide. Modifions la:

function preload() {

    game.load.image('sky', 'assets/sky.png');
    game.load.image('ground', 'assets/platform.png');
    game.load.image('star', 'assets/star.png');
    game.load.spritesheet('dude', 'assets/dude.png', 32, 48);

}

Cela chargera 4 ressources (NdT: ou asset en anglais) : 3 images et une page de sprite. Cela peut paraĂźtre Ă©vident Ă  certains d’entre vous, mais je voudrais souligner le premier paramĂštre, appelĂ© aussi clĂ© de ressource (NdT: asset key). Cette chaine de caractĂšres est un lien vers la ressource chargĂ©e et c’est ce que vous allez utiliser dans votre code au moment de crĂ©er les sprites. Vous ĂȘtes libres d’utiliser n’importe quelle chaine de caractĂšres valide en Javascript comme clĂ©.

CrĂ©ation d’un Sprite

Pour ajouter un Sprite Ă  notre jeu, ajoutez le code suivant dans la fonction create :

game.add.sprite(0, 0, 'star');

Si vous ouvrez la page page3.html dans un navigateur, vous devriez voir un Ă©cran de jeu noir avec un seul sprite d’étoile dans le coin en haut Ă  gauche:

part3

L’ordre dans lequel les Ă©lĂ©ments sont gĂ©nĂ©rĂ©s dans l’affichage correspond Ă  l’ordre dans lequel vous les crĂ©ez. Donc, si vous souhaitez mettre un fond derriĂšre le sprite Ă©toile, vous devez vous assurer qu’il a Ă©tĂ© ajoutĂ© comme sprite, avant l’étoile.

A bientĂŽt

Voilà, je vous laisse avec la traduction qui correspond aux part1 à 3 et je vous promet de continuer au plus vite bien sûr.

Entre temps, ne soyez pas timides : laissez des commentaires ou écrivez moi.

A La Découverte De Phaser - 1

AprĂšs l’atelier MixTeen durant MixIT (je vous raconterai peut ĂȘtre un de ces 4), j’ai eu envie de faire comme les enfants : faire un jeu.

Comme j’avais assistĂ© Ă  la confĂ©rence de Laurent Victorino qui poussait Ă  faire des jeux, et celle de Tristan Nitot qui plaidait pour que le web soit la plateforme mobile, j’ai fait une sauce de tout ça et me suit lancĂ© dans le dĂ©veloppement de ce qui devrait ĂȘtre un jeu HTML5.

Comme j’aime bien passer des heures Ă  apprendre plein de choses, j’ai commencĂ© par chercher ce qui se faisait dans ce monde qui est bien loin de mes souvenirs de HTML 4 et de ce que gĂ©nĂšre le framework Java que j’utilise au travail.

J’ai trouvĂ© des outils qui me rappelaient les Game Creator de ma jeunesse comme Construct 2, Tululoo ou bien sĂ»r Phaser.

La liste n’est pas exhaustive et n’hĂ©sitez pas Ă  regarder ce que donne une recherche de Game creator Html5.
Chaque outil a ses particularitĂ©s, certains ne fonctionnent que sous Windows, certains n’ont pas beaucoup de documentation
 que chacun trouve son bonheur, c’est passionnant.

J’ai volontairement mis de cĂŽtĂ© Unity mĂȘme si ça me plairait bien de m’y plonger Ă©galement.

Mais revenons Ă  Phaser.
Un des points qui m’a dĂ©cidĂ© est un sympathique tutoriel Making your first Phaser game.

Si l’anglais ne vous pose pas de souci, filez lire et utiliser l’original, Alvin Ourad et Richard Davey ont fait un excellent travail.

Mais dis donc Tonton Codeur, pourquoi faire un article si tu nous envoie faire l’original ?
Et bien, tout d’abord, il va falloir Ă  vous y habituer, je fais souvent comme je veux, surtout sur mon propre blog ;). Ensuite, il y a quand mĂȘme pas mal d’entre vous qui prĂ©fĂšrent travailler sĂ©parement leur anglais et leur code.
MĂȘme s’il serait prĂ©fĂ©rable de vous forcer un peu, je ne vois pas pourquoi vous seriez privĂ© de cet excellent tutoriel.
Il est comme ça votre Tonton Codeur, il ne vous abandonne pas !

Avant tout, je tiens Ă  remercier Alvin qui m’a autorisĂ© Ă  traduire et publier la traduction de son tutoriel.
Je tacherai de bien respecter l’original, si ce n’est pas le cas, n’hĂ©sites pas, Tonton Codeur sait reconnaitre ses fautes (normalement :) )

Allez, c’est suffisament long pour un article de blabla, je vous dit à trùùùùs bientît pour les premiers pas avec Phaser.