1.Se vuoi qualcosa che è vicino al tuo modello, userei le particelle (non deve essere un sistema di particelle completamente bruciato).
Rendi le tue particelle sotto forma di poligono su una RenderTexture. Assicurati di usare la miscelazione additiva sulle particelle. Le particelle all'interno del poligono si fonderanno uniformemente l'una con l'altra mentre le particelle all'esterno daranno il bordo morbido che desideri. (Un esempio dell'effetto può essere visto in questo video di YouTube: Video sulle particelle additive
additive Ora esegui il rendering del RenderTexture sulla schermata principale e il gioco è fatto. Il RenderTexture è necessario in modo che le particelle non si fondano con lo sfondo.
Puoi provare a mettere i triangoli direttamente sulla trama delle particelle e vedere come funziona. Altrimenti renderli sopra la tua "zuppa di particelle" come uno strato separato.
Creato un mockup rapido in un jsfiddle aggiornato che assomiglia a questo
Puoi trovare la demo aggiornata qui
2. Ogni particella ha una velocità e un'origine. Quando il tuo giocatore tocca il poligono, cambi la velocità di ogni particella in proporzione alla velocità del giocatore. Più una particella è lontana dal tuo giocatore, meno è influenzata dalla velocità del giocatore.
La formula per calcolare una velocità delle particelle sarebbe qualcosa del genere:
//player.velocity and particle.velocity are vectors
//k is a factor to enhance or weaken the influence of players velocity
var distanceToPlayer = (player.position - particle.position).length();
particle.velocity = particle.velocity + ((k * player.velocity) + particle.velocity) * (1/distanceToPlayer);
Per calcolare la posizione della particella, inserirla nel metodo di aggiornamento:
var speedY = -(springConstant * (particle.position.y - particle.origin.y)) - (dampingFactor * particle.velocity.y);
var speedX = -(springConstant * (particle.position.x - particle.origin.x)) - (dampingFactor * particle.velocity.x);
particle.position.y = particle.position.y + speedY;
particle.position.x = particle.position.x + speedX;
particle.velocity.x = particle.velocity.x + speedX;
particle.velocity.y = particle.velocity.y + speedY;
Questo dovrebbe darti un "fluido" in cui ogni particella oscilla attorno alla sua origine quando il giocatore agita il fluido. La molla Costante cambia la quantità di una particella che si allontana dalla sua origine e lo smorzamento Fattore della velocità con cui la particella si ferma. Potrebbe essere necessario modificare il codice poiché è la versione modificata di una simulazione 1d che utilizzo nel mio gioco.
Ora con una demo: Demo
Basta modificare le 3 costanti in alto fino a quando il fluido si comporta come si desidera.