スプライトの形に添ったパーティクルエミッタを作る①:辺からの出力

輪郭取得を使ってスプライトの形に添ったパーティクルエミッタを作ってみたいと思います。

輪郭からpolygonクラスを作る

以前作った輪郭取得を改造し、取得時にphaser.geom.polygonを作成するようにします。

public poly: { [key: string]: Phaser.Geom.Polygon } = {};
~~
var poly = new Phaser.Geom.Polygon(pol);
this.poly[texture] = poly;

createverts後に作成したpolyを使ってemitterを作ります。

this.emitter = this.add.particles('2x2').createEmitter({
    x: 400,
    y: 300,
    scale: { start: 0.1, end: 0 },
    speed: { min: -100, max: 100 },
    tint: 0x000000,
    quantity: 50
});

this.emitter.setEmitZone({
    source: this.poly[key],
    type: 'edge',
    quantity: 50
});

実行結果がこちらです。 f:id:Phaser_3:20190128140813p:plain f:id:Phaser_3:20190128140801p:plain f:id:Phaser_3:20190128140845g:plain
輪郭に沿った出力ができています。
emitterには他に与えられた点群からランダムに出力するrandomというパラメータがあるのですが、getRandomPointという関数がないと使用できないらしく、randomでのエミッタ設定はできませんでした。
次回はrandomを使いスプライトの輪郭からではなく範囲内からエミットする方法を調べます。