1.Nếu bạn muốn thứ gì đó gần với mockup của mình, tôi sẽ sử dụng các hạt (Nó không phải là một hệ thống hạt được thổi hoàn toàn).
Kết xuất các hạt của bạn dưới dạng đa giác trên RenderTexture. Hãy chắc chắn để sử dụng hỗn hợp phụ gia trên các hạt. Các hạt bên trong đa giác sẽ hòa trộn với nhau một cách trơn tru trong khi các hạt ở bên ngoài sẽ tạo ra cạnh mềm mại mà bạn muốn. (Một ví dụ về hiệu ứng có thể được xem trong video youtube này: Video Hạt phụ
Bây giờ kết xuất RenderTexture trên màn hình chính của bạn và bạn đã hoàn tất.
Bạn có thể thử đặt các hình tam giác trực tiếp lên kết cấu hạt và xem cách thức hoạt động của nó. Nếu không, hãy đặt chúng lên trên "súp hạt" của bạn dưới dạng một lớp riêng biệt.
Tạo một mockup nhanh trong một jsfiddle được cập nhật trông như thế này
Bạn có thể tìm thấy bản demo được cập nhật ở đây
2.Mỗi hạt có vận tốc và nguồn gốc. Khi người chơi của bạn chạm vào đa giác, bạn thay đổi từng hạt vận tốc tỷ lệ với vận tốc của người chơi. Một hạt càng xa người chơi của bạn, nó càng ít bị ảnh hưởng bởi vận tốc của người chơi.
Công thức tính vận tốc của các hạt sẽ giống như thế này:
//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);
Để tính toán vị trí của hạt bạn đặt điều này trong phương pháp cập nhật của bạn:
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;
Điều này sẽ cung cấp cho bạn một "chất lỏng" trong đó mỗi hạt dao động xung quanh nguồn gốc của nó khi người chơi khuấy chất lỏng. SpringConstant thay đổi số lượng hạt bay ra khỏi nguồn gốc của nó và dampingFactor tốc độ của hạt đến mức nào. Bạn có thể phải điều chỉnh mã vì đây là phiên bản sửa đổi của mô phỏng 1d tôi sử dụng trong trò chơi của mình.
Bây giờ với bản demo: Bản trình diễn
Chỉ cần tinh chỉnh 3 hằng số ở trên cùng cho đến khi chất lỏng hoạt động như bạn muốn.