Table des matières
Comment utiliser un timer avec Phaser ?
Les timers (ou minuteurs) sont très utiles dans le développement d'un jeu. Ils peuvent définir la fréquence à laquelle vous voulez déclencher un évènement : faire apparaitre un ennemi, lancer une bombe, etc…
Comment déclencher un évènement au bout d'un certain temps ?
Par exemple, dans le jeu, nous voulons qu'une bombe explose au bout de 5 s.
Le code suivant permet de déclencher la fonction “explosion” au bout de 5 s :
game.time.events.add(Phaser.Timer.SECOND * 5, explosion, this);
- Le premier paramètre est la durée d'attente avant le déclenchement de l'événement. Dans ce cas 5 secondes.
- Les deux paramètres suivants sont la fonction à appeler (“explosion”) et le contexte sous lequel cela va se passer.
Le script complet :
var game = new Phaser.Game(800, 600, Phaser.AUTO, 'DivJeu', {preload: preload, create: create, update: update}); function preload() { game.load.image('bombe','medias/bombe.png'); } function create() { bombe=game.add.sprite(400, 300, 'bombe'); game.time.events.add(Phaser.Timer.SECOND * 5, explosion, this); // création du timer } function update() { } function explosion(){ bombe.kill(); // supprime la bombe }
Comment déclencher un évènement en boucle ?
Le code suivant permet déclencher un évènement en boucle (loop).
Comme exemple, nous allons faire tomber une bombe toutes les 2 secondes. Pour cela, la fonction “nouvelleBombe” est appelée toutes les 2 secondes.
var game = new Phaser.Game(800, 600, Phaser.AUTO, 'DivJeu', {preload: preload, create: create, update: update}); function preload() { game.load.image('bombe','medias/bombe.png'); } function create() { game.physics.startSystem(Phaser.Physics.ARCADE); game.physics.arcade.gravity.y = 150; game.time.events.loop(Phaser.Timer.SECOND*2, nouvelleBombe, this); // création du timer } function update() { } function nouvelleBombe() { bombe = game.add.sprite(game.world.randomX, 0, 'bombe'); game.physics.enable(bombe, Phaser.Physics.ARCADE); }
Comment déclencher un évènement un nombre de fois donné à intervalles réguliers ?
Par exemple, il est possible de faire tomber 10 bombes au rythme d'une par seconde. Nous utiliserons le script précédent. Il suffit de remplacer la ligne contenant le timer par la suivante :
game.time.events.repeat(Phaser.Timer.SECOND, 10, nouvelleBombe, this);
- Le premier paramètre est la durée d'attente avant le déclenchement de l'événement. Dans ce cas 1 secondes.
- Le second paramètre est le nombre de fois que l'événement sera exécuté au total. Ici, nous allons l'exécuter 10 fois.
- Les deux paramètres suivants sont la fonction à appeler ('nouvelleBombe') et le contexte sous lequel cela va se passer.
Une fois que l'événement aura été appelé 10 fois, il ne sera plus jamais appelé.
Comment arrêter un timer ?
Pour arrêter un timer, vous devez d'abord ajouter une référence en l'affectant à une variable. En modifiant l'exemple précédent :
var monTimer=game.time.events.loop(Phaser.Timer.SECOND*2, nouvelleBombe, this);
Ensuite, pour arrêter le timer :
game.time.events.remove(monTimer);
Pour arrêter tous les timers en cours :
game.time.events.removeAll();