1.Wenn Sie etwas wünschen, das Ihrem Modell nahe kommt, würde ich Partikel verwenden (es muss kein vollständig ausgeblasenes Partikelsystem sein).
Rendern Sie Ihre Partikel in Form eines Polygons auf einer RenderTexture. Achten Sie darauf, die Partikel mit Additiven zu mischen. Die Partikel innerhalb des Polygons fügen sich nahtlos ineinander, während die Partikel auf der Außenseite die gewünschte weiche Kante ergeben. (Ein Beispiel für den Effekt finden Sie in diesem Youtube-Video: Additive Partikel-Video
Rendern Sie jetzt die RenderTexture auf Ihrem Hauptbildschirm, und Sie sind fertig. Die RenderTexture ist erforderlich, damit die Partikel nicht mit Ihrem Hintergrund verschmelzen.
Sie können versuchen, die Dreiecke direkt auf die Partikeltextur zu setzen und zu sehen, wie dies funktioniert. Andernfalls rendern Sie sie als separate Ebene auf Ihre Partikelsuppe.
Erstellt ein schnelles Modell in einem aktualisierten Jsfiddle, das so aussieht.
Die aktualisierte Demo finden Sie hier
2. Jedes Teilchen hat eine Geschwindigkeit und einen Ursprung. Wenn Ihr Spieler das Polygon berührt, ändern Sie die Geschwindigkeit der einzelnen Partikel proportional zur Geschwindigkeit des Spielers. Je weiter ein Partikel von Ihrem Spieler entfernt ist, desto weniger wird es von der Geschwindigkeit des Spielers beeinflusst.
Die Formel zur Berechnung der Geschwindigkeit eines Partikels würde etwa so lauten:
//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);
Um die Position des Partikels zu berechnen, geben Sie dies in Ihre Aktualisierungsmethode ein:
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;
Dies sollte Ihnen eine "Flüssigkeit" geben, in der jedes Partikel um seinen Ursprung schwingt, wenn der Spieler die Flüssigkeit rührt. Die springConstant ändert, wie weit ein Partikel von seinem Ursprung wegschwingt, und den dampingFactor, wie schnell das Partikel zur Ruhe kommt. Möglicherweise müssen Sie den Code anpassen, da er die modifizierte Version einer 1d-Simulation ist, die ich in meinem Spiel verwende.
Jetzt mit einer Demo: Demo
Passen Sie einfach die drei Konstanten oben an, bis sich die Flüssigkeit so verhält, wie Sie es möchten.