Saya sedang mengembangkan 2D shmup (yaitu Aero Fighters ) dan saya bertanya-tanya apa saja berbagai cara untuk menyimpan level. Dengan asumsi bahwa musuh didefinisikan dalam file xml mereka sendiri, bagaimana Anda mendefinisikan ketika musuh memunculkan di tingkat?
Apakah ini didasarkan pada waktu? Pembaruan? Jarak?
Saat ini saya melakukan ini berdasarkan "level waktu" (jumlah waktu level berjalan - jeda tidak memperbarui waktu). Berikut ini sebuah contoh (serialisasi dilakukan oleh XNA):
<?xml version="1.0" encoding="utf-8"?>
<XnaContent xmlns:level="pekalicious.xanor.XanorContentShared.content.level">
<Asset Type="level:Level">
<Enemies>
<Enemy>
<EnemyType>data/enemies/smallenemy</EnemyType>
<SpawnTime>PT0S</SpawnTime>
<NumberOfSpawns>60</NumberOfSpawns>
<SpawnOffset>PT0.2S</SpawnOffset>
</Enemy>
<Enemy>
<EnemyType>data/enemies/secondenemy</EnemyType>
<SpawnTime>PT0S</SpawnTime>
<NumberOfSpawns>10</NumberOfSpawns>
<SpawnOffset>PT0.5S</SpawnOffset>
</Enemy>
<Enemy>
<EnemyType>data/enemies/secondenemy</EnemyType>
<SpawnTime>PT20S</SpawnTime>
<NumberOfSpawns>10</NumberOfSpawns>
<SpawnOffset>PT0.5S</SpawnOffset>
</Enemy>
<Enemy>
<EnemyType>data/enemies/boss1</EnemyType>
<SpawnTime>PT30S</SpawnTime>
<NumberOfSpawns>1</NumberOfSpawns>
<SpawnOffset>PT0S</SpawnOffset>
</Enemy>
</Enemies>
</Asset>
</XnaContent>
Setiap elemen Musuh pada dasarnya adalah gelombang tipe musuh tertentu. Jenisnya didefinisikan dalam EnemyType sedangkan SpawnTime adalah "level waktu" yang muncul oleh gelombang ini. NumberOfSpawns dan SpawnOffset adalah jumlah musuh yang akan muncul dan waktu yang dibutuhkan antara masing-masing spawn.
Ini bisa jadi ide bagus atau mungkin ada yang lebih baik di luar sana. Saya tidak yakin. Saya ingin melihat beberapa pendapat dan ide.
Saya memiliki dua masalah dengan ini: menelurkan musuh dengan benar dan membuat editor level. Masalah editor level adalah masalah yang sama sekali berbeda (yang mungkin akan saya posting di masa depan: P).
Adapun pemijahan dengan benar, masalahnya terletak pada kenyataan bahwa saya memiliki waktu pembaruan variabel dan jadi saya perlu memastikan saya tidak melewatkan musuh karena spawn offset terlalu kecil, atau karena pembaruan membutuhkan waktu lebih lama . Saya agak memperbaikinya untuk sebagian besar, tetapi bagi saya sepertinya masalahnya adalah bagaimana saya menyimpan level.
Jadi, ada ide? Komentar?
Terima kasih sebelumnya.
sumber
Saya sarankan Anda mempelajari kode PowerManga sebagai referensi. Mereka memiliki dua jenis level: level sisi-bergulir (seperti tyrian) di mana segala sesuatu diposisikan pada jarak tertentu dari level awal dan hal-hal lain dihasilkan secara acak, dan level "diam" (à la galaga) di mana satu gelombang hanya diurai setelah yang sebelumnya selesai polanya.
Pola gelombang tentu saja dapat secara efisien direncanakan oleh kurva bezier berturut-turut (halaman wikipedia memiliki animasi yang rapi untuk menjelaskannya)
Jika saya dapat memberikan komentar terakhir, saya akan sepenuhnya meninggalkan XML di sini demi sesuatu yang lebih ekspresif, lebih mudah untuk dipertahankan dan lebih berguna dalam pemrograman game seperti skrip LUA.
HTH.
sumber
Pertimbangkan untuk menghasilkan musuh secara prosedural. Saya tahu ini sangat berbeda dari jawaban yang Anda inginkan, dan itu secara tidak langsung menyelesaikan masalah sepenuhnya.
Jika saya melakukan ini, saya akan menugaskan setiap unit musuh nilai "poin" dari betapa sulitnya, kemudian menetapkan level beberapa poin - 100 poin bernilai seratus musuh 1 poin, atau satu musuh 100 poin, atau apa pun di antara keduanya.
Anda mungkin perlu membatasi ini sedikit sehingga Anda tidak mendapatkan bos 100 poin di tingkat pertama, atau bahwa Anda memiliki sejumlah minimum musuh, dan Anda mungkin ingin secara berkala polling daftar musuh kiri dan tarik yang berikutnya di layar.
Anda dapat mengambil langkah lebih jauh dengan memiliki formasi: koleksi posisi dan poin, misalnya. tujuh musuh satu poin dalam satu baris (baris atau kolom), atau lima poin diapit oleh dua 3 poin.
sumber