Apa matematika di balik laser ungu 'Raiden 2'?

15

Jalur laser dipengaruhi oleh input pengguna dan musuh hadir di layar. Ini adalah video, pada jam 5:00 laser yang diperlihatkan ditampilkan: Raiden II (PS) - 1 Loop Clear - Bagian 2

MEMPERBARUI

Ini adalah tes menggunakan Inkscape, kapal ada di bawah, 4 musuh pertama ditargetkan oleh plasma. Tampaknya ada semacam pola. Saya memindahkan kapal terlebih dahulu, kemudian pegangan dari itu untuk membentuk sudut 45 °, kemudian ketika mencoba menyesuaikan kurva saya menemukan pola pegangan paralel dan terus demikian sampai saya mencapai musuh terakhir. masukkan deskripsi gambar di sini

Pembaruan, 5/26/2012 : Saya memulai proyek XNA menggunakan beziers, masih ada beberapa pekerjaan yang diperlukan, akan memperbarui pertanyaan minggu depan. Tetap disini !

masukkan deskripsi gambar di sini

Pembaruan: 30/5/2012 : Tampaknya mereka menggunakan kurva Bézier, saya pikir saya akan dapat mereplikasi / meniru plasma dengan grade seperti itu. Ada dua topik baru yang saya temukan sejak terakhir kali: Panjang busur , fenomena Runge , pertama harus membantu dalam memiliki gerakan linier mungkin atas kurva Bézier, kedua harus membantu dalam mengoptimalkan jumlah simpul. Lain kali saya akan memasang video sehingga Anda dapat melihat progresnya 8-)

Aybe
sumber
2
Yah, itu semacam spline. Kurva Bézier Mungkin . Saya tidak yakin apakah pertanyaan ini dapat dijawab oleh siapa pun selain pengembang asli. Jika Anda mencoba membuat kembali efek ini, Anda harus menunjukkan kepada kami apa yang Anda miliki dan memberi tahu kami apa yang tidak berfungsi.
MichaelHouse
2
Tidak tahu, tapi ada denda jumlah radikal untuk itu.
Hackworth
1
Setelah memainkan Raiden dalam jumlah yang tidak sehat, saya ragu pasta gigi adalah jenis kurva bentuk tertutup. Tampaknya selalu menyimpan cukup banyak memori. Saya menduga itu sedang melakukan semacam pathing dengan radius putar wajib.
@ Byte56: Shmup devs / penggemar berdedikasi, saya akan terkejut jika ini tidak didokumentasikan / direkayasa balik di suatu tempat sekarang.
3
Sepertinya itu menempatkan segmen satu per satu waktu keluar dari kapal, dengan tikungan maksimum, dan masing-masing segmen berbalik ke arah musuh jika ada yang dekat atau ke arah gerakan kapal.
Kevin Reid

Jawaban:

6

Saya baru saja menciptakan sesuatu yang dapat membantu Anda. Itu sebagai tanggapan untuk membantu seseorang di forum GLBasic.

Berikut ini adalah tautan forum dengan saran saya: Random Rolling Hills

Ini ditulis dalam GLBasic, tetapi saya mencoba membuatnya mudah dibaca, sehingga harus mudah dikonversi ke bahasa apa pun.

Untuk menggunakannya untuk kebutuhan Anda, Anda perlu menghasilkan data / poin spline Anda. Ganti titik 'bukit' dalam contoh saya dengan titik spline Anda. Anda hanya perlu menambahkan efek animasi / berkedip-kedip. Mungkin pergeseran tekstur acak.

'Ajaib' yang sebenarnya terjadi di fungsi 'AddPoint' saya:

FUNCTION AddPoint: h AS THillPoint
    DIMPUSH self.points[], h

    // Is this the very first data point?
    IF LEN(self.points[]) = 1
        self.points[0].pu.Set(0, self.points[0].pm.y - self.texture_ht_up)
        self.points[0].pd.Set(0, self.points[0].pm.y + self.texture_ht_dn)
        RETURN
    ENDIF

    ALIAS h0 AS self.points[-2]  // Reference to the 2nd last point
    ALIAS h1 AS self.points[-1]  // Reference to the last point
    LOCAL angle#
    LOCAL v1 AS TVector
    LOCAL v0 AS TVector

    // Calculate 'p2' of HillPoint - form rectangle with previous point
    angle = ATAN(h1.pm.y - h0.pm.y, h1.pm.x - h0.pm.x)  -90// Angle of the two points

    v1.x = COS(angle) * self.texture_ht_up + h1.pm.x
    v1.y = SIN(angle) * self.texture_ht_up + h1.pm.y
    v0.x = COS(angle) * self.texture_ht_up + h0.pm.x
    v0.y = SIN(angle) * self.texture_ht_up + h0.pm.y
    h0.pu = h0.pu.AverageWith(v0)
    h1.pu.Copy(v1)

    v1.x = COS(angle) * -self.texture_ht_dn + h1.pm.x
    v1.y = SIN(angle) * -self.texture_ht_dn + h1.pm.y
    v0.x = COS(angle) * -self.texture_ht_dn + h0.pm.x
    v0.y = SIN(angle) * -self.texture_ht_dn + h0.pm.y
    h0.pd = h0.pd.AverageWith(v0)
    h1.pd.Copy(v1)
ENDFUNCTION

Di sinilah saya menghitung paha depan akhir / poligon yang memplot sprite sepanjang garis.

Inilah hasil akhirnya: masukkan deskripsi gambar di sini

Dan dengan kerangka gambar poligon diaktifkan: masukkan deskripsi gambar di sini

Doug.McFarlane
sumber
1
Hebat aku akan melihatnya. BTW, tautan yang Anda berikan rusak.
Aybe
3
Tautan itu tampaknya tidak rusak bagi saya ...
doppelgreener
Saya baru saja memeriksa tautan Random Textured Rolling Hills sekarang, ini membawa saya kesalahan 404.
Aybe
1
Aneh. Itu masih bekerja untuk saya. Tapi inilah tautan yang mendasarinya: glbasic.com/forum/index.php?topic=8118
Doug.McFarlane
Rusak bagi saya, saya mencoba beranda, itu menunjukkan 'Berhasil!' dan itu saja ... aneh.
Aybe