Saya ingin membuat serangkaian pola peluru yang berkembang yang membentuk bentuk-bentuk seperti kotak, segitiga, dll. Contoh dari apa yang saya kejar dapat dilihat dalam video berikut ini di mana ketika bintang-bintang dikumpulkan, peluru meledak dalam bentuk sebuah mengembang bintang:
12
Jawaban:
Cara termudah untuk melakukan ini adalah pertama-tama merancang bentuk kemudian menghitung pergerakan partikel. Dalam jawaban ini saya akan membangun sebuah persegi, tetapi ini berlaku untuk bentuk apa pun.
Mulailah dengan mendesain bentuk Anda sebagai posisi relatif di sekitar titik asal.
Sekarang Anda perlu menghitung bagaimana bentuk akan berkembang. Untuk melakukan ini, kita cukup menghitung vektor yang menunjuk dari
origin
ke setiappoint
dengan mengurangiorigin
posisi dari posisi kitapoint
kemudian menormalkan vektor.vector = normalize(point.x - origin.x, point.y - origin.y)
.Kita sekarang dapat menghitung posisi titik pada titik waktu kapan saja dengan menggunakan vektor ini. Anda menghitung posisi poin selanjutnya dengan melakukan
point.position += point.vector * point.velocity
. Contoh kodesemu menggunakan poin kami sebelumnya:Melakukan ini akan memindahkan semua poin ke luar pada 3 unit setiap frame.
Catatan
sumber
Jadi, ada proyek di luar sana yang disebut BulletML yang merupakan bahasa markup untuk membuat pola partikel / peluru yang kompleks. Anda hampir pasti perlu melakukan porting kode ke bahasa Anda sendiri, tetapi dapat melakukan beberapa hal yang sangat menakjubkan.
Sebagai contoh, bos ini dilakukan dalam ekstensi BulletML untuk Unity3D (dimodifikasi banyak) (penulis pola itu mengunggah bahwa video dan Misery gila, serta bagus 1 ). Ini variasi yang paling sulit dari musuh itu dan menunjukkan apa yang mampu dilakukan BulletML dengan baik (dan lihat juga beberapa bos Misery lainnya, Seperti Wallmaster ).
Atau saya dapat menunjukkan contoh ini, yang merupakan pola yang saya tulis saat mengerjakan perluasan untuk The Last Federation , menggunakan revisi sistem yang lebih lama yang kurang ramah-mod dan hanya menggunakan variabel AZ karakter tunggal:
Peluru hijau yang membuat cincin itu muncul dari peluru induk yang berputar dengan kecepatan tinggi, tetapi mereka sendiri tidak memiliki gerakan. Mereka menangani kerusakan besar-besaran, menjaga agar pemain berada pada jarak yang lebih jauh, membatasi mereka untuk menurunkan senjata yang rusak dan memungkinkan pembela bergerak untuk melecehkan pemain (pemain menang jika struktur yang tidak bergerak di tengah sana dihancurkan).
Berikut adalah sebagian dari sintaks XML yang menciptakan gelembung-gelembung itu:
Anda dapat melihat beberapa bidikan "gelombang gravitasi" ungu di tangkapan layar, yang bergerak hampir secara instan dari sumber (yang berotasi) ke tepi gelembung, di mana ia menghasilkan bidikan "bilah melengkung" berwarna hijau, yang duduk di sana selama 12 detik sebelum melecehkan. Tembakan biru dan kuning yang saya hilangkan, karena jauh lebih rumit.
Salah satu pola lain ( peluru artileri ) dalam ekspansi sebenarnya ditulis oleh Misery, meskipun saya membuat beberapa modifikasi. Awalnya ini adalah tembakan menembus rendah yang menembus ke jarak jauh dan kemudian meledak menjadi tampilan kembang api besar, menghasilkan banyak kerusakan. Kisaran maksnya jauh lebih tinggi daripada yang bisa dicapai pemain, pada dasarnya memaksa pemain untuk terlibat dalam jarak pendek, yang menguntungkan untuk jenis unit NPC lain karena efek shotgun (lebih banyak peluru yang dikelompokkan di zona kecil).
BulletML mudah digunakan, secara umum, dan dapat melakukan hal-hal menakjubkan. Peluru dapat mengubah arah, mengubah kecepatan, menelurkan pola lain, mati lebih awal, mengulangi kumpulan perintah dalam satu lingkaran, menggunakan penundaan, mengubah gambar spet peluru, mengikuti induknya (atau tidak) ... Dan apa pun yang tidak mendukung Anda dapat tulis ke dalamnya.
Saya pasti akan merekomendasikan itu jika Anda melakukan game shoot up serius. Anda masih perlu mengerjakan matematika koordinat untuk mendapatkan bentuk yang diinginkan, seperti yang dibicarakan Charanor dalam jawabannya, tetapi mesin peluru seperti BulletML akan memberi Anda jauh lebih banyak fleksibilitas sehingga Anda akan menghabiskan lebih banyak waktu merancang pola-pola baru daripada mencari tahu bagaimana kode mereka.
sumber
Seperti yang ditunjukkan oleh Charanor, Anda dapat menggunakan berbagai titik untuk menentukan bentuk Anda dan kemudian memperbarui posisi mereka dari waktu ke waktu. Di bawah ini adalah contoh kerja bagaimana menerapkan bentuk bintang atau bentuk khusus menggunakan poin:
sumber