Dans ce chapitre, nous allons commencer par créer la raquette de notre casse-brique, puis la déplacer avec le clavier et la souris.

La raquette (ou barre de renvoi) est l’élément que le joueur contrôle pour empêcher la balle de tomber et sera utilisée pour renvoyer la balle vers les briques dans le but de… les casser ! 😃

Elle devra donc se déplacer de gauche à droite de manière fluide et réactive pour être capable d’intercepter la balle au bon moment.

Création de la raquette

Avant de pouvoir contrôler et intéragir avec la raquette, nous devons d’abord être en mesure de la voir à l’écran.

Affichage de la raquette

Pour commencer, nous allons utiliser un simple rectangle blanc pour représenter la raquette.

Nous allons attacher cet élément à notre scène en utilisant this.paddle, ce qui nous permettra d’y accéder facilement dans d’autres fonctions comme update().

JavaScript
function create() {
  this.paddle = this.add.rectangle(400, 550, 120, 20, 0xffffff);
}
  • this.add.rectangle(400, 550, 120, 20, 0xffffff); ajoute un rectangle blanc de 120px de large et 20px de haut, positionné au centre bas de l’écran.

  • this.paddle = … stocke ce rectangle dans la scène sous la variable paddle, ce qui nous permet de l’utiliser dans d’autres fonctions

À ce stade, notre raquette est visible, mais elle ne bouge pas encore !

Création de la raquette
Création de la raquette

Amélioration : Stocker les dimensions par défaut

Nous allons maintenant préparer la raquette pour pouvoir facilement modifier ses dimensions dynamiquement et revenir à ses dimensions du début.

Pourquoi faire ça ?
Par exemple, si un bonus est récupéré, on pourra multiplier sa largeur x2 pour la rendre plus grande temporairement, puis au bout de 5s on reviendra aux dimensions par défaut.

Pour cela, nous allons stocker ses valeurs initiales dans une constante.

JavaScript
const DEFAULT_PADDLE = {
    WIDTH: 120,
    HEIGHT: 20,
    BACKGROUND_COLOR: 0xffffff,
}

function create() {
  this.paddle = this.add.rectangle(400, 550, DEFAULT_PADDLE.WIDTH, DEFAULT_PADDLE.HEIGHT, DEFAULT_PADDLE.BACKGROUND_COLOR);
}

Parfait ! Maintenant, il sera très simple de jouer avec la taille de la raquette.

Optimisation – Création de la raquette
Optimisation – Création de la raquette

2. Déplacements de la raquette

Nous allons maintenant permettre au joueur de déplacer la raquette.

Déplacement avec le clavier

Nous allons utiliser les touches fléchées gauche et droite pour déplacer la raquette.

On va commencer par les activer dans la fonction create() avec this.cursors = this.input.keyboard.createCursorKeys();.

JavaScript
function create() {

  const DEFAULT_PADDLE = {
    WIDTH: 120,
    HEIGHT: 20,
    BACKGROUND_COLOR: 0xffffff,
  }

  this.paddle = this.add.rectangle(400, 550, DEFAULT_PADDLE.WIDTH, DEFAULT_PADDLE.HEIGHT, DEFAULT_PADDLE.BACKGROUND_COLOR);

  // Activation des touches de déplacement
  this.cursors = this.input.keyboard.createCursorKeys();
}
  • this.input.keyboard.createCursorKeys(); permet de détecter les touches fléchées.

  • this.cursors = … stocke les touches fléchées sur la scène pour pouvoir les utiliser

Maintenant, on va écouter les touches « LEFT » et « RIGHT » lorsqu’elles sont enfoncées et déplacer notre raquette en conséquence avec un pas de 5.

JavaScript
function update() {
  if (this.cursors.left.isDown) {
    this.paddle.x -= 5;
  } else if (this.cursors.right.isDown) {
    this.paddle.x += 5;
  }
}

Très bien, mais le problème c’est que notre raquette peut quitter l’écran…

Déplacement de la raquette avec le clavier n°1

Réglons ça en limitant ses déplacements aux bords du jeu. Pour ça, on va vérifier que la position du rectangle (représenté par le point en son centre) ne dépasse pas 0 à gauche ni 800 à droite.

On va utiliser la fonction Phaser.Math.Clamp(newPosition, minValue, maxValue);

Comment fonctionne Phaser.Math.Clamp ?
Cette fonction vérifie que newPosition est bien comprise entre minValue et maxValue :

  • Si newPosition est inférieure à minValue, alors minValue est retourné.

  • Si newPosition est supérieure à maxValue, alors maxValue est retourné.

  • Sinon, newPosition est retournée telle quelle.

Cela permet d’éviter que certaines valeurs sortent des limites imposées.

JavaScript
function update() {
  if (this.cursors.left.isDown) {
    this.paddle.x = Phaser.Math.Clamp(this.paddle.x - 5, 0, 800);
  } else if (this.cursors.right.isDown) {
    this.paddle.x = Phaser.Math.Clamp(this.paddle.x + 5, 0, 800);
  }
}

Très bien, mais du coup notre raquette dépasse de l’écran de sa moitié

Déplacement de la raquette avec le clavier n°2

il faut donc qu’on réduise les limites de la moitiée de la largeur de la raquette en récupérant sa taille actuelle avec this.paddle.width / 2

JavaScript
function update() {
  if (this.cursors.left.isDown) {
    this.paddle.x = Phaser.Math.Clamp(this.paddle.x - 5, this.paddle.width / 2, 800 - (this.paddle.width / 2));
  } else if (this.cursors.right.isDown) {
    this.paddle.x = Phaser.Math.Clamp(this.paddle.x + 5, this.paddle.width / 2, 800 - (this.paddle.width / 2));
  }
}

Enfin, comme pour les dimensions, si on veut pouvoir rajouter des bonus / malus de vitesse on va stocker sa vitesse initiale en modifiant notre constante DEFAULT_PADDLE

JavaScript
const DEFAULT_PADDLE = {
  WIDTH: 120,
  HEIGHT: 20,
  BACKGROUND_COLOR: 0xffffff,
  SPEED : 5
}

Puis en l’utilisant :

JavaScript
function update() {
  if (this.cursors.left.isDown) {
    this.paddle.x = Phaser.Math.Clamp(this.paddle.x - DEFAULT_PADDLE.SPEED, this.paddle.width / 2, 800 - (this.paddle.width / 2));
  } else if (this.cursors.right.isDown) {
    this.paddle.x = Phaser.Math.Clamp(this.paddle.x + DEFAULT_PADDLE.SPEED, this.paddle.width / 2, 800 - (this.paddle.width / 2));
  }
}

Parfait ! Notre raquette est maintenant opérationnelle avec le clavier 🙂

Déplacement de la raquette avec le clavier n°3

Déplacement avec la souris

Nous allons maintenant ajouter le déplacement avec la souris pour une meilleure jouabilité.

Il va nous falloir ajouter l’événement pointermove dans la fonction create() pour écouter les déplacements de la souris

JavaScript
function create() {

  ...

  //  Ecoute de l'événement pointermove
  this.input.on('pointermove', (pointer) => {
    console.log(pointer.x);
  });
}

Il nous reste plus qu’à modifier la position de la raquette en respectant les limites du jeu

JavaScript
this.input.on('pointermove', (pointer) => {
    this.paddle.x = Phaser.Math.Clamp(pointer.x, this.paddle.width / 2, 800 - (this.paddle.width / 2));
  });
Déplacement de la raquette avec la souris

Félicitations ! Maintenant, la raquette suit la souris en temps réel !

En résumé

Dans ce chapitre, nous avons :

  • Créé et affiché la raquette

  • Ajouté le déplacement au clavier (flèches gauche/droite)

  • Implémenté le contrôle à la souris pour un gameplay fluide

Là prochaine étape ? Ajouter la balle bien sûr !

Plan du chapitre Liste des aperçus

Présentation

Présentation de la formation

Les bases du casse-brique

Statut des chapitres :
Disponible
Partiellement disponible
Bientôt disponible

Présentation

Les bases du casse-brique

Statut des chapitres :
Disponible
Partiellement disponible
Bientôt disponible

📌 Bienvenue dans l’espace Questions & Réponses !

Tu as une question sur un concept du chapitre ? Une explication te semble un peu floue ? 🤔 Cet espace est là pour toi ! Pose tes questions et échange avec les autres étudiants pour mieux comprendre le contenu.

Avant de poser une question, pense à :

  • Vérifier si quelqu’un n’a pas déjà posé la même question.
  • Donner un maximum de détails pour obtenir une réponse précise.
  • Être respectueux et clair dans ta demande.

L’entraide est la clé de l’apprentissage ! Alors, n’hésite pas à partager tes doutes ou à aider les autres si tu as la réponse. 🚀

Liste des réponses

Les questions / réponses sont disponibles uniquement pour les membres Premium.

Poser une question

L’ajout de questions est disponible uniquement pour les membres Premium.