Come codificare UI / HUD in Entity System?


18

Penso di aver già avuto l'idea del sistema Entity ispirato ad Adam Martin (t-machine). Voglio iniziare a usarlo per il mio prossimo progetto.

Conosco già le basi di Entità, Componenti e Sistemi. Il mio problema è come gestire UI / HUD. Ad esempio, una finestra delle missioni, una finestra delle abilità, una finestra informativa sui personaggi, ecc. Come si gestiscono gli eventi dell'interfaccia utente (ad es. Premendo un pulsante)? Si tratta di elementi che non devono essere elaborati in ogni frame. Attualmente sto usando MVC per codificare l'interfaccia utente ma non credo che sarà compatibile con Entity System.

Ho letto che Entity System è incorporato in un OOP più grande. Non so se l'interfaccia utente è al di fuori di ES o no. Come posso avvicinarmi a questo?

Risposte:


17

Forse stai pensando troppo nei sistemi di entità. Le entità hanno lo scopo di mirare gli oggetti nel gioco, come personaggi, nemici, script, proiettili, trigger, ecc.

Forse se rendi la tua UI separata, sarà molto meglio e più facile. Non devi fare TUTTO nell'ambito delle entità.


Questo è anche ciò che dice Adam Martin in uno dei suoi post o commenti su t-machine. ES è una soluzione per un problema specifico. Può e deve essere usato insieme a soluzioni più "tradizionali" per altri aspetti del gioco (motore).
user8363,

Grazie. Non sono sicuro di cosa dovrebbe essere in ES. Quindi, come si codifica un'interfaccia utente efficace? Penso che MVC non lo tagli perché sto avendo problemi con la gerarchia.
Sylpheed,

Vedo che accetti di utilizzare architetture diverse per l'interfaccia utente. Allora qual è il problema con MVC?
Narek,

@Armen MVC non ha problemi, ma inserendolo nell'ambito delle entità ha. È solo che i suoi benefici non batteranno i suoi svantaggi. Non è necessario essere un astronauta dell'architettura
Gustavo Maciel,

3

Mentre penso che un'interfaccia utente Entità / Componente possa funzionare, sarebbe difficile farlo. Inoltre, è abbastanza lontano dai componenti e dai sistemi che avresti per elaborare le tue entità di gioco, essenzialmente sarebbe solo un'altra entità / sistema di componenti all'interno del tuo gioco. Non riesco a immaginare che ci sarebbero molte sovrapposizioni tra i due.

I sistemi di entità sono fantastici e può essere allettante usarli ovunque. Dopotutto, quando ottieni un martello davvero dolce, sei tentato di trattare tutti i tuoi problemi come le unghie. Tuttavia, il sistema EC è solo un altro strumento nella borsa di programmazione. Per i problemi utilizzati per risolverlo funziona davvero bene, ma hai strumenti migliori per problemi come l'interfaccia utente.

La struttura dell'ereditarietà funziona davvero bene per le GUI. Non solo per la creazione dei componenti dell'interfaccia utente, ma anche per la loro disposizione. È davvero bello poter avere componenti dell'interfaccia utente come figli di altri componenti in modo che possano ereditare proprietà come posizione, scala e opacità. Se dovessi provare a configurarlo con un sistema EC, dovresti infrangere alcune regole del sistema EC.


1

È possibile creare una nuova funzione di interfaccia che viene chiamata ogni volta che viene disegnata l'interfaccia utente / HUD e consentire ai componenti personalizzati / con script di implementare quella funzione. Ciò richiede un sistema IMGUI (ci sono molti tutorial su Google, questa è solo la presentazione originale) da usare. Con ciò, puoi creare finestre come entità all'interno delle quali avrai il tuo componente di creazione dell'interfaccia utente e un componente di rendering del frame della finestra.

Per quanto riguarda il non elaborare tutto questo in ogni frame, è possibile eseguire il rendering di tutta l'interfaccia utente in un buffer diverso che verrà aggiornato solo su tutti i tipi di eventi di input / dati. Cioè, ogni volta che viene ricevuto un evento, cambia una variabile per indicare che la finestra deve essere ridipinta al fotogramma successivo. Se quella variabile è vera, viene quindi impostata su false e successivamente vengono chiamate le interfacce dell'interfaccia utente. Se si desidera animazioni, è importante utilizzare questo esatto ordine di operazioni in modo che la stessa interfaccia utente possa innescare una riverniciatura per il fotogramma successivo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.