Saya pikir saya sudah mendapatkan ide Sistem Entitas yang diinspirasi oleh Adam Martin (mesin-t). Saya ingin mulai menggunakan ini untuk proyek saya berikutnya.
Saya sudah tahu dasar Entitas, Komponen, dan Sistem. Masalah saya adalah bagaimana menangani UI / HUD. Misalnya, jendela pencarian, jendela keterampilan, jendela info karakter, dll. Bagaimana Anda menangani acara UI (mis. Menekan tombol)? Ini adalah hal-hal yang tidak perlu diproses setiap frame. Saat ini, saya menggunakan MVC untuk kode UI tetapi saya tidak berpikir itu akan kompatibel untuk Sistem Entitas.
Saya telah membaca bahwa Sistem Entitas tertanam pada OOP yang lebih besar. Saya tidak tahu apakah UI di luar ES atau tidak. Bagaimana saya mendekati yang ini?
sumber
Meskipun saya pikir Entity / Component UI mungkin berfungsi, akan sulit untuk membuatnya. Selain itu, itu cukup jauh dihapus dari komponen dan sistem yang Anda miliki untuk memproses entitas game Anda, itu pada dasarnya akan terjadi lain entitas / komponen sistem dalam permainan Anda. Saya tidak bisa membayangkan akan ada banyak tumpang tindih antara keduanya.
Sistem entitas mengagumkan dan bisa tergoda untuk menggunakannya di mana saja. Lagi pula, ketika Anda mendapatkan palu yang benar-benar manis, Anda tergoda untuk memperlakukan semua masalah Anda seperti kuku. Namun, sistem EC hanyalah alat lain dalam tas pemrograman Anda. Untuk masalah itu digunakan untuk menyelesaikannya bekerja dengan sangat baik, tetapi Anda memiliki alat yang lebih baik untuk masalah seperti UI.
Struktur warisan bekerja sangat baik untuk GUI. Tidak hanya untuk membuat komponen UI tetapi untuk meletakkannya juga. Sangat menyenangkan untuk dapat membuat komponen UI menjadi anak-anak dari komponen lain sehingga mereka dapat mewarisi properti seperti posisi, skala dan opacity. Jika Anda mencoba mengaturnya dengan sistem EC, Anda harus melanggar beberapa aturan sistem EC.
sumber
Anda dapat membuat fungsi antarmuka baru yang dipanggil setiap kali UI / HUD ditarik dan memungkinkan komponen kustom / skrip untuk mengimplementasikan fungsi itu. Ini membutuhkan sistem IMGUI (ada banyak tutorial di Google, ini hanya presentasi asli) untuk digunakan. Dengan itu, Anda bisa menjadikan windows sebagai entitas di mana Anda akan memiliki komponen UI-building Anda sendiri dan komponen renderer bingkai jendela.
Sedangkan untuk tidak memproses semua ini setiap frame, Anda dapat merender semua UI ke buffer berbeda yang hanya akan Anda perbarui pada semua jenis input / data peristiwa. Yaitu, setiap kali suatu peristiwa diterima, itu mengubah beberapa variabel untuk menunjukkan bahwa jendela perlu dicat ulang bingkai berikutnya. Jika variabel itu benar, maka ditetapkan ke antarmuka palsu dan UI dipanggil setelah itu. Jika Anda ingin animasi, penting agar Anda menggunakan urutan operasi yang tepat ini sehingga UI itu sendiri dapat memicu pengecatan ulang untuk frame berikutnya.
sumber