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 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
}

Voir l'exemple

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);
}

Voir l'exemple


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);

Une fois que l'événement aura été appelé 10 fois, il ne sera plus jamais appelé.

Voir l'exemple


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();