Dari atas kepala saya, klausa yang menonjol bagi saya adalah bahwa Anda ingin area menjadi konstan. Itu menurut saya kesakitan dalam semua ini, jadi mari kita coba dan menemukan solusi mudah untuk itu.
Ambil seutas tali dan ikat kedua ujungnya menjadi satu lingkaran. Saya mungkin salah, tetapi intuisi saya mengatakan bahwa bagian dalam string itu memiliki area konstan, atau akan bertindak sangat buruk seperti batas amuba Anda.
Jadi saya akan mengatakan: mengimplementasikan string. ;) Sebagian besar pustaka fisika dapat melakukan pegas (dalam Box2D ini terlihat seperti sambungan jarak jauh), dan cara termudah untuk membuat string adalah dengan menghubungkan banyak string bersama-sama. Bergabunglah dengan yang terakhir hingga yang pertama untuk membuat lingkaran. Pastikan pegas dalam string memiliki konstanta pegas yang cukup tinggi untuk tidak direntangkan terpisah - Anda ingin agar pegas menjadi cukup kaku dan bergerak bersamaan, tidak memanjang.
Selanjutnya, buat kekuatan untuk bertindak pada string. Secara sepele, dua inti / mata / titik kontrol Anda menciptakan kekuatan ke titik-titik yang membentuk string. Buat gaya jatuh dengan fungsi kuadrat terbalik:
float forceOnPoint(point, ball)
{
float d = distance(point, ball);
return K / (d*d);
}
Dan buat arah gaya langsung dari mata kontrol / bola, seperti kekuatan penolak yang berasal dari bola. Tweak K untuk mengontrol kekuatan pasukan. Pastikan K tidak terlalu tinggi - Anda tidak ingin itu hanya didorong keluar secara paksa oleh kekuatan, jauhkan dari bola. Tinggalkan banyak kelonggaran di tali Anda.
Dengan hanya dua orang itu Anda mungkin akan berakhir dengan bentuk yang cukup seragam, jadi saya juga menyarankan Anda membuat beberapa kekuatan yang lebih lemah di sekitar 'sup' sekitarnya untuk mengubah bentuk amuba. Anda dapat membuat tempat acak ini, mengubah gaya mereka secara teratur (Anda bisa menjadikannya fungsi sinusoid untuk gerakan yang bagus) dan membuatnya bekerja dengan cara yang sama seperti bola.
Vaginasi (fnarr): ini yang sulit. Anda menyebabkannya untuk menyelimuti objek dengan memeriksa untuk melihat apakah dua titik yang tidak berdekatan pada string telah berhasil cukup dekat, dan jika demikian Anda perlu:
Ukur jarak antara titik pada tali. Hitung jumlah bagian pegas. Temukan jalur 'lebih pendek' dari A ke B.
Pecahkan string dan gabungkan kembali dengan dua titik yang berdekatan. Dengan kata lain, langsung gabungkan titik A ke titik B dan buang semua barang di antara.
Masukkan kembali jumlah poin yang hilang (ditambah poin bonus jika Anda ingin memperbesar ukuran dengan memakan sesuatu) ke dalam string di sisi lain - yaitu, sisi dari B ke A. Jika Anda memasukkannya secara merata sepanjang dan membuat mereka lebih pendek dari jarak yang diinginkan antara titik, Anda harus mendapatkan efek kenyal-mengembang yang bagus.
Saya pikir itu mencakup segalanya. Ngomong-ngomong: ide terdengar luar biasa.