EPSy (Ezelia Particles Syetem) is a particle system mainly designed for Phaser.io and Pixi.js, but can also be used standalone with an integrated Canvas renderer.
Use the online editor to generate awesome particles then export and use the data with EPSY !
EPSy is inspired from Matt Greer excellent tutorial about particles systems.
First you'll need to reference EPSY.js or EPSY.min.js script in your html file
<script src="js/EPSY.min.js"></script>
then reference one of the plugins, depending on your library
reference the Pixi plugin
<script src="js/EPSY.Pixi.js"></script>
stage = new PIXI.Stage(0x000000);
renderer = PIXI.autoDetectRenderer(800, 600);
document.getElementById('canvasContainer').appendChild(renderer.view);
//Creating EPSy emitter instance
var epsy = new PIXI.EPSY();
//creating a particle system from a given configuration
epsy.loadSystem(config, 400, 400);
stage.addChild(epsy);
reference the Phaser plugin
<script src="js/EPSY.Phaser.js"></script>
var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'gameContainer', { preload: preload, create: create, update: update, render: render });
function create() {
// ... your game creation code ...
//Registering EPSy plugin
var epsy = game.plugins.add(Phaser.Plugin.EPSY);
//creating a particle system from a given configuration
var particleSystem1 = epsy.loadSystem(config, 200, 200);
// you can let Phaser add the particle system to world group or choose to add it to a specific group
var myGroup = game.add.group();
myGroup.add(particleSystem1);
}
reference the CanvasHelper plugin
<script src="js/EPSY.CanvasHelper.js"></script>
var context = canvas.getContext('2d');
//creating canvas helper instance
var canvasHelper = new EPSY.CanvasHelper(context);
//creating a particle system from a given configuration
canvasHelper.loadSystem(config, 400, 400);
then in your drawing loop call
canvasHelper.draw();
You can use the online editor to generate configurations : http://labs.ezelia.com/epsy/
or you can write them manually.
EPSy configuration can be an object or an array of objects containing each the following configuration
you can use this to identify your emitter
Particles life in seconds
Particles life variance
Particles start radius (will be modified whith the scale parameter)
a path to an image or URL data
emitter life duration in seconds
in case of an array of emitters, this will determine the Z order
var config = {
totalParticles: 150,
emissionRate: 80,
pos: {
x: 150,
y: 250
},
posVar: {
y: 0,
x: 10
},
gravity: {
x: - 0,
y: - 200
},
texture: "img/particle.png",
xEquation: '',
yEquation: '',
angle: 90,
angleVar: 360,
speed: 15,
speedVar: 5,
life: 2,
lifeVar: 1,
radialAccel: 0,
radialAccelVar: 0,
tangentialAccel: 0,
tangentialAccelVar: 0,
textureEnabled: true,
textureAdditive: true,
radius: 30,
radiusVar: 5,
startScale: 2,
endScale: 1,
startColor: [178, 102, 51, 1],
startColorVar: [0, 0, 51, 0.1],
endColor: [0, 0, 0, 1],
active: true,
duration: Infinity
}
this one uses an array of two emitters
var config = [
{
"pos": {
"x": 3,
"y": -5
},
"posVar": {
"x": 10,
"y": 0
},
"speed": 15,
"speedVar": 5,
"angle": 90,
"angleVar": 360,
"life": 2,
"lifeVar": 1,
"radius": 30,
"radiusVar": 5,
"textureAdditive": true,
"startScale": 2,
"startScaleVar": 0,
"endScale": 1,
"endScaleVar": 0,
"startColor": [
178,
102,
51,
1
],
"startColorVar": [
0,
0,
51,
0.1
],
"endColor": [
0,
0,
0,
1
],
"endColorVar": [
0,
0,
0,
0
],
"gravity": {
"x": 0,
"y": -200
},
"radialAccel": 0,
"radialAccelVar": 0,
"tangentialAccel": 0,
"tangentialAccelVar": 0,
"texture": "img/particle.png",
"totalParticles": 50,
"emissionRate": 20,
"textureEnabled": true,
"active": true,
"duration": null,
"id": "emitter1",
"border": {
"top": 57.80186188689731,
"left": 200,
"bottom": 200,
"right": 200
},
"zIndex": 1
},
{
"pos": {
"x": 1,
"y": -32
},
"posVar": {
"x": 5,
"y": 0
},
"speed": 15,
"speedVar": 5,
"angle": 90,
"angleVar": 20,
"life": 2,
"lifeVar": 0.5,
"radius": 20,
"radiusVar": 5,
"textureAdditive": false,
"startScale": 2,
"startScaleVar": 0,
"endScale": 4,
"endScaleVar": 0,
"startColor": [
144,
144,
144,
1
],
"startColorVar": [
0,
0,
0,
0
],
"endColor": [
187,
187,
187,
0.2
],
"endColorVar": [
0,
0,
0,
0
],
"colorList": [],
"gravity": {
"x": 0,
"y": -50
},
"radialAccel": 0,
"radialAccelVar": 0,
"tangentialAccel": 0,
"tangentialAccelVar": 0,
"texture": "img/particle.png",
"totalParticles": 20,
"emissionRate": 20,
"textureEnabled": true,
"active": true,
"duration": null,
"id": "emitter2",
"border": {
"top": 200,
"left": 200,
"bottom": 200,
"right": 200
},
"zIndex": 0
}
]