Saya sedang mengembangkan mesin gim sederhana (dalam C #, jika itu penting), dan saya tidak bisa memikirkan cara yang cukup baik untuk mengimplementasikan skrip dalam hal arsitektur.
Ini adalah strategi sederhana berbasis giliran dengan animasi kustom, logika-independen untuk pertempuran. Ini memiliki lapisan arsitektur global untuk sistem / hal-hal tingkat rendah dan, yang paling penting, dua modul utama - logika dan permainan-hal-haly - yang berkomunikasi menggunakan event manager.
Dan masalahnya adalah, saya benar-benar ingin skrip memengaruhi kedua hal yang terkait dengan logika permainan (mengubah parameter unit, dll) dan hal-hal yang terkait dengan tampilan permainan, seperti animasi / dialog khusus untuk pertempuran yang mungkin bergantung pada pemicu skrip tertentu.
(Sejujurnya, idealnya saya ingin script untuk mengontrol alur permainan, hanya menyisakan mekanik inti / grafik untuk logika / tampilan, tapi saya baru dalam hal ini, jadi saya tidak yakin saya bisa melakukannya sekarang)
Saya telah memikirkan tiga opsi:
Biarkan skrip hidup dalam logika, tetapi biarkan ia tahu tentang sisi grafis gim. Tapi ini akan membuat divisi logika / tampilan sangat kabur, bukankah ...
Jadikan skrip sebagai modul terpisah yang akan bertukar acara dengan yang lain menggunakan pengelola acara yang sama. Tapi ini perlu sangat berhati-hati tentang sinkronisasi acara, saya kira ... dan juga menambahkan banyak jenis acara ke manajer. (Tetap, favorit pribadi)
Jadikan skrip sebagai modul di atas semuanya, sehingga dapat secara langsung memengaruhi / memanggil fungsi logika / tampilan. Hal ini memungkinkan fungsionalitas yang lebih luas secara inheren dengan biaya mengacaukan seluruh skema pertukaran acara dan takut bahwa skrip dapat merusak barang-barang bahkan ketika sebenarnya tidak seharusnya.
Jadi, saya tidak dapat memutuskan salah satu dari ini atau memikirkan cara yang lebih baik untuk menyisipkan modul skrip ... Ada saran atau tautan yang berguna?
Terima kasih!
Ps terima kasih telah memigrasi pertanyaan, tidak tahu ada bagian khusus untuk gamedev
sumber
Jawaban:
Saya percaya Anda menginginkan opsi ketiga tetapi Anda akan menemukan bahwa Anda benar dalam pemikiran Anda bahwa memiliki peristiwa logis yang terjadi di dua lokasi yang berpotensi merupakan hal yang buruk. Anda akan menemukan bahwa Anda ingin modul logika mesin berakhir dengan tanda centang pembaruan yang menanyakan dua pertanyaan 'Apa yang harus saya lakukan sekarang?' dan 'Bagaimana saya melakukannya?' yang kemudian dapat Anda ikat skrip untuk menangani menjawab pertanyaan-pertanyaan itu.
Pasangan ini dengan mengekspos objek yang berisi data dan API untuk mengakses komponen Logika yang diperlukan (maksud saya Anda bisa skrip pencarian AI Path, tetapi karena itu adalah potongan kode generik yang cenderung digunakan dan digunakan kembali, mengapa tidak menanamkannya dalam modul dan kemudian menambahkannya ke API yang terpapar ke bahasa scripting?). Ini akan memberi Anda aksesibilitas serta lokasi yang ditentukan dengan jelas di mana segala sesuatu terjadi.
Sekali lagi, saya keberatan dengan pernyataan yang sama seperti yang selalu saya lakukan. Produk yang sudah jadi selalu lebih berharga daripada teori yang bagus dalam pemrograman :)
Semoga ini membantu!
sumber
Banyak orang cenderung menganggap remeh kekuatan bahasa dinamis yang berpikir bahwa fleksibilitas semacam itu harus dibayar dengan kecepatan; Ini benar tetapi seringkali biayanya dapat diabaikan.
Secara pribadi saya cenderung mengembangkan sebanyak mungkin menggunakan bahasa dinamis yang mengeksploitasi ekspresi dan kemudian saya membuat profil prototipe untuk memahami di mana dan jika optimasi diperlukan.
Dalam kasus Anda ini berarti Anda harus mencoba bergerak ke opsi ketiga, mengembangkan bagian "lebih tinggi" menggunakan bahasa dinamis yang cocok yang dapat Anda gunakan sebagai bahasa scripting juga.
Banyak pola dapat digunakan setelah Anda menempatkan dinamisme pada kedalaman yang tepat. Script khusus Anda dapat diintegrasikan dalam sistem berbasis peristiwa sebagai sistem callback, ketika inti memanggil kembali itu dapat memberikan lingkungan yang sesuai sehingga skrip dapat mengubah status global atau hanya keadaan bagian dari keseluruhan sistem.
Anda dapat merangkum antarmuka yang skrip Anda dapat berinteraksi dengan menggunakan pola Façade. Dalam metode façade Anda dapat menempatkan logika yang menentukan bagaimana , kapan , jika skrip dapat menggunakan fungsi dan mengabstraksi interaksi skrip dari implementasi inti.
Antarmuka skrip Anda harus menyediakan metode pabrik yang relevan sehingga skrip dapat menghasilkan elemen tanpa instantiate secara langsung; contoh-contoh ini dapat menjadi pembungkus objek nyata sehingga kontrol akses logika lebih lanjut dapat diimplementasikan.
sumber
Objek skrip perlu memiliki akses ke objek lain yang akan disediakan datanya. Berhati-hatilah untuk tidak melewatkan objek lain secara langsung ke objek skrip Melakukannya menciptakan antarmuka yang rapuh. Anda mungkin ingin memiliki sesuatu seperti kelas mediator yang mengelola referensi objek tersebut dan menyediakan akses data ke objek skrip.
sumber
Lua adalah pilihan populer untuk bahasa scripting tujuan umum. Anda dapat membuat bahasa skrip Anda sendiri menggunakan Lex dan Yacc (lihat artikel di Game Programming Gems 3) tetapi saya akan mengatakan sebagian besar kebutuhan Anda dapat diatasi dengan Lua tidak peduli seberapa besar atau kecil.
sumber