Tengo un emisor de partículas que emite múltiples duplicados de la misma imagen, como de costumbre. Sin embargo, me gustaría que algunas de las partículas se voltearan, ya sea completamente al azar, o más o menos en el medio, de modo que las partículas que caen hacia la izquierda se volteen y las partículas que caen hacia la derecha no.
Sin embargo, no pude encontrar nada relacionado con voltear partículas sin voltear TODAS ellas. Sólo me gustaría que algunos se voltearan. ¿Es esto posible de alguna manera?
Hay varias formas, creo que la "más rápida" sería simplemente usar la propiedad scaleX del emisor.
este código voltea alrededor del 10% de las partículas
( 0.9 > Math.random() ), multiplicándolo por-1, cuando debería voltearse.
Código de ejemplo:
this.add.particles('sparkle').createEmitter({ x: 200, y: 100, scaleX: { onEmit: function () { return ( 0.9 > Math.random() ) ? -1 : 1; } }, speed: { min: -100, max: 100 }, quantity: 0.1, frequency: 1, });Pero asumo por una pregunta anterior que tiene un emisor con una propiedad de "escala aleatoria" . En ese caso tendrías que hacer algo como esto:
Código de ejemplo, para partículas escaladas al azar:
gameState.splash = this.add.particles('droplet').createEmitter({ x: gameState.height/2, y: gameState.width/2, scale: { onEmit: function () { // create random new scale let newRandowmScale = Phaser.Math.FloatBetween(0.05, 0.3); return ( 0.9 > Math.random() ) ? -1 * newRandowmScale : newRandowmScale; } }, speed: { min: -100, max: 100 }, ... });ACTUALIZAR (SlowerFix): código de ejemplo, para partículas escaladas al azar:
Lo que hace la actualización: guardar la escala actual del evento
scaleXy usarla en el eventoscaleY. (es hacky, pero debería funcionar. Veré si hay una solución más limpia)
gameState.splash = this.add.particles('droplet').createEmitter({ x: gameState.height/2, y: gameState.width/2, scaleY:{ onEmit: function(particle){ // keep scale value positive return Math.abs(particle.scaleX); } }, scaleX:{ onEmit: function(p){ let scale = Phaser.Math.FloatBetween(.2, .5); return Math.random() > .9 ? scale * -1 : scale; } }, speed: { min: -100, max: 100 }, ... });