Ripple Animaton in Phaser

Phaser Ripple Animation

I recently needed a ripple animation for a background effect in a game I was putting together. The simplest thing would be to use a sprite sheet. After a few hours of looking and not finding, I decided to code the animation using Phaser’s graphics. Yes, I know that putting together a ripple sprite sheet is not a great artistic task, but trust me, it is beyond my poor drawing abilities.

Anyway, this is what I came up with. An object(Ripple) that draws and redraws an ellipse and then after it fades, destroys itself. I then made another object (Ripples) that adds a ripple every 1 second. Here is the result:

The Code:

How to use

        //turn the stage blue
        game.stage.backgroundColor = 0x43A8BB;

        //make the ripples
        this.ripples = new Ripples();

        //place the ripples
        this.ripples.y = game.height * .6;
        this.ripples.x = game.width / 2;

 

Ripple.js

class Ripple extends Phaser.Group {
    constructor() {
        super(game);
        this.graphics = game.add.graphics();
        //the elipse width
        this.ww = 1;
        //how much to speed up
        this.inc = 1;
        //add the graphics to the class
        this.add(this.graphics);
        //start the timer
        game.time.events.loop(Phaser.Timer.SECOND / 20, this.updateRipple, this);
    }
    drawRipple() {
        //height is 20% of the width
        this.hh = this.ww / 5;
        //set the thickness and color
        this.graphics.lineStyle(2, 0xffffff);
        //draw the elipse        
        this.graphics.drawEllipse(0, 0, this.ww, this.hh);
    }
    updateRipple() {
        console.log("updateRipple");
        //grow the ripple
        this.ww += this.inc;
        //turn down the alpha
        this.alpha -= .01;
        //clear the graphics
        this.graphics.clear();
        this.drawRipple();
        //if the alpha is faded enough
        //destroy the object
        if (this.alpha < .01) {
            this.destroy(true);
        }
    }
}

Ripples.js

class Ripples extends Phaser.Group
{
	constructor()
	{
		 super(game);
		 game.time.events.loop(Phaser.Timer.SECOND, this.addRipple, this);
	}
	addRipple()
	{
		var r=new Ripple();
		this.add(r);
	}
}

Source Code

Leave a Comment