Saya sedang mengerjakan game di mana beberapa peristiwa dalam game perlu terjadi sesekali. Contoh yang bagus akan menjadi tutorial. Anda memulai permainan, dan pada beberapa titik dalam permainan terjadi suatu peristiwa:
- Anda menghadapi musuh pertama Anda, permainan berhenti dan Anda menerima penjelasan tentang cara membunuhnya.
- Anda membunuh musuh pertama, Anda menerima pesan "pekerjaan bagus".
- Anda mendapatkan item baru, menu dengan popup statistik item.
- dll.
Gim yang sedang saya kerjakan adalah gim puzzle yang aturan mainnya hampir sama, jadi sepertinya tidak efisien untuk melakukan hardcode semua peristiwa ini di tingkat yang berbeda.
Haruskah saya mendefinisikan peristiwa ini dalam sumber eksternal, seperti XML? Kemudian, tulis penerjemah yang membaca XML dan tetapkan persyaratan acara untuk level tersebut? Saya tidak yakin bagaimana saya bisa mendefinisikan suatu peristiwa yang harus terjadi ketika Anda membunuh dua musuh misalnya.
Untuk lebih jelasnya, saya tidak mencari bahasa pemrograman terbaik atau bahasa scripting untuk melakukan ini, tetapi lebih pada metode terbaik untuk menangani ini.
Terima kasih!
Sunting: Contoh kedua karena pertanyaan saya cukup sulit untuk dipahami:
Masalah yang saya alami adalah untuk menempatkan beberapa tindakan ekstra dalam permainan dalam prosedur yang selalu hampir sama. Seperti pertarungan RPG, setiap orang mendapat giliran, memilih skill, dll - selalu sama. Tapi bagaimana jika ada kasus di mana saya ingin menampilkan cutscene di suatu tempat di antara keduanya. Modyfing seluruh struktur permainan untuk lulus dalam kelas pertempuran yang diubah dengan cutscene termasuk tampaknya sangat tidak efisien. Saya bertanya-tanya bagaimana biasanya ini dilakukan.
sumber
Jawaban:
Ini sangat tergantung pada bagaimana acara sebenarnya dikomunikasikan antar objek dalam game Anda. Misalnya, jika Anda menggunakan sistem pesan pusat maka Anda bisa memiliki modul tutorial yang mendengarkan pesan tertentu dan membuat popup tutorial setiap kali mendengar pesan tertentu. Kemudian Anda dapat mengatur pesan apa yang harus didengarkan, beserta sembulan yang ditampilkan, dalam file XML atau sesuatu yang diuraikan oleh modul tutorial. Dengan memiliki objek tutorial terpisah yang memantau keadaan gim dan menampilkan sembulan tutorial saat memperhatikan hal-hal di gim, Anda dapat mengubah objek tutorial sesuka hati tanpa perlu mengubah apa pun tentang gim Anda. (Apakah ini pola Pengamat? Saya tidak terbiasa dengan semua pola desain.)
Secara keseluruhan meskipun itu tergantung pada kompleksitas tutorial Anda jika itu layak dikhawatirkan. Hard-coding peristiwa dalam kode Anda dan / atau tingkat tidak tampak seperti masalah besar bagi saya hanya beberapa popup tutorial. Saya ingin tahu apa sebenarnya yang ada dalam pikiran Anda yang membuat Anda berpikir itu tidak efisien, karena semua yang harus Anda lakukan setiap pemicu hanya mengirim pesan ke modul tutorial, seperti TutorialModule.show ("1st_kill");
sumber
Inilah batasan desain yang saya pahami:
Kode gameplay inti tidak peduli dengan persyaratan level dan tidak boleh digabungkan dengan kode yang berhubungan dengannya.
Pada saat yang sama, itu adalah kode gameplay inti yang tahu kapan peristiwa spesifik yang memenuhi persyaratan tersebut terjadi (mendapatkan item, membunuh musuh, dll.)
Level yang berbeda memiliki serangkaian persyaratan yang berbeda dan mereka perlu dijelaskan di suatu tempat.
Mengingat itu, saya kemungkinan akan melakukan sesuatu seperti ini: Pertama, buat kelas yang mewakili tingkat permainan. Ini akan merangkum sekumpulan persyaratan spesifik yang dimiliki suatu level. Ini memiliki metode yang dapat dipanggil ketika peristiwa permainan terjadi.
Berikan kode gameplay inti referensi ke objek level saat ini. Ketika peristiwa gameplay terjadi, itu akan memberitahu tingkat dengan memanggil metode di atasnya:
enemyKilled
,itemPickedUp
, dllSecara internal,
Level
perlu beberapa hal:LevelRequirement
objek yang menggambarkan kumpulan tujuan spesifik yang Anda butuhkan untuk level itu.Saat Anda memasuki level, Anda akan membuatnya
Level
dengan hakLevelRequirement
s , mengatur kode gameplay, dan memberinya level itu.Setiap kali terjadi pertandingan, gameplay meneruskannya
Level
. Yang pada gilirannya menghitung data agregat (jumlah total musuh yang terbunuh, musuh jenis itu yang terbunuh, dll.) Ia kemudian berjalan melalui objek-objek kebutuhannya, memberikan masing-masing data agregat. Suatu persyaratan menguji untuk melihat apakah telah terpenuhi, dan jika demikian memunculkan perilaku apa pun yang dihasilkan sesuai (menampilkan teks tutorial, dll.)LevelRequirement
pada dasarnya membutuhkan dua hal:RequirementType
enum dengan hal-hal sepertiFIRST_KILL
dan kemudian besarswitch
pada yang tahu cara memeriksa setiap jenis.)Masih ada pertanyaan di mana seperangkat persyaratan tersebut dijelaskan. Anda dapat melakukan sesuatu seperti XML atau format file teks lainnya. Itu berguna jika:
Jika tidak ada yang seperti itu, saya mungkin akan langsung membangunnya dalam kode. Simpler selalu lebih baik.
sumber
Saya pikir Anda perlu tahu cara membuat acara ini dan sisa posting adalah tentang hal itu, Jika Anda hanya ingin menyimpan acara ini maka gunakan beberapa basis data relasional atau uraikan dengan teks dan gunakan bahasa scripting (dia akan melakukan parsing dan mengevaluasi untuk Kamu). :)
Yang Anda inginkan adalah mengenali peristiwa yang terjadi (1) dan kemudian melakukan beberapa tindakan yang diminta oleh peristiwa ini (pesan cetak, periksa penekanan tombol ...) (2). Anda juga ingin membuat acara ini hanya terjadi sekali (3).
Pada dasarnya Anda ingin memeriksa kondisi dan kemudian menjadwalkan beberapa perilaku.
Cara mengenali acara (1)
Terbuat dari apa acara
Dalam pandangan yang lebih umum, setiap peristiwa semacam itu terbuat dari:
Cara menyimpan acara ini
Dalam beberapa struktur data:
Anda juga dapat menyimpannya di basis data relasional, meskipun sepertinya tidak perlu, jika Anda ingin membuat game ini dalam jumlah besar, Anda mungkin perlu membuatnya.
Anda kemudian harus mengurai string / hal-hal ini. Atau Anda dapat menggunakan beberapa bahasa skrip seperti Python atau LUA atau bahasa seperti LISP, mereka semua dapat menguraikan dan menjalankannya untuk Anda. :)
Bagaimana cara menggunakan acara ini di loop game (2)
Anda akan membutuhkan dua struktur data ini:
Algoritma:
Cara membuat tindakan ini sendiri (2)
Anda membuat daftar objek, yang memiliki fungsi "pembaruan". Mereka kadang-kadang disebut entitas (dalam mesin Gempa) atau aktor (dalam mesin Unreal).
Aksi "katakan sesuatu"
Tindakan "memerlukan kunci"
Metode apa yang harus dipelajari
sumber