Bagaimana kode UI / HUD dalam Sistem Entitas?


18

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?

Jawaban:


17

Mungkin Anda terlalu banyak berpikir dalam sistem entitas. Entitas dimaksudkan untuk membatasi objek dalam game, seperti karakter, musuh, skrip, peluru, pemicu, dll.

Mungkin jika Anda membuat UI Anda terpisah, itu akan menjadi jauh lebih baik dan lebih mudah. Anda tidak harus membuat SEMUANYA dalam lingkup entitas.


Ini juga yang dikatakan Adam Martin di salah satu posting atau komentarnya di t-machine. ES adalah solusi untuk masalah tertentu. Itu dapat dan harus digunakan bersama dengan solusi yang lebih 'tradisional' untuk aspek lain dari permainan (mesin).
user8363

Terima kasih. Saya tidak yakin apa yang seharusnya ada di ES. Jadi, bagaimana Anda membuat kode UI yang efektif? Saya pikir MVC tidak memotongnya karena saya memiliki masalah dengan hierarki.
Sylpheed

Saya melihat Anda setuju untuk menggunakan arsitektur yang berbeda untuk UI. Lalu apa masalahnya dengan MVC?
Narek

@Armen MVC tidak memiliki masalah, tetapi menempatkannya di dalam lingkup entitas memiliki. Hanya saja manfaatnya tidak akan mengalahkan kerugiannya. Tidak perlu menjadi Astronot Arsitektur
Gustavo Maciel

3

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.


1

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.