wicast / EPSy

a Particles system for Phaser and Pixi

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

EPSy

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.

Usage

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

Pixi plugin

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

	

Phaser plugin

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

Standalone Canvas Renderer plugin

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

Particle System Configuration

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

id: string

you can use this to identify your emitter

pos : {x:number, y:number}

border : {top: number, left: number, bottom: number, right: number}

posVar : {x:number, y:number}

gravity : {x:number, y:number}

speed : number

speedVar : number

radialAccel :number

radialAccelVar :number

tangentialAccel : number

tangentialAccelVar : number

angle : number

angleVar : number

life : number

Particles life in seconds

lifeVar : number

Particles life variance

radius : number

Particles start radius (will be modified whith the scale parameter)

radiusVar : number

startScale : number

startScaleVar: number

endScale: number

endScaleVar: number

textureAdditive: boolean

texture : string

a path to an image or URL data

startColor: [r,g,b,a]

startColorVar: [r,g,b,a]

endColor: [r,g,b,a]

endColorVar: [r,g,b,a]

totalParticles: number

emissionRate: number

duration: number or Infininy

emitter life duration in seconds

zIndex: number

in case of an array of emitters, this will determine the Z order

Examples

Flame emitter configuration example

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
}

Flame with smoke configuration example

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

About

a Particles system for Phaser and Pixi


Languages

Language:JavaScript 99.0%Language:TypeScript 1.0%