Quindi sto lavorando a un progetto e sto incontrando problemi concettuali nella creazione della mia interfaccia utente. È per un gioco multi-monitor DirectX11 che sto scrivendo.
Ho un prototipo funzionante, con i menu di entità che spuntano e più entità all'interno di quei menu. Tutto va bene e bene, tranne che è un codificatore. Sto sbagliando, quindi ho passato le ultime due settimane a imparare e decidere come refactoring per essere migliore.
Finora, ho deciso di separarlo in tre parti, simile a MVC: Uno è il Listener di eventi o il Controller, che conterrà le caselle di delimitazione, la classe base e il GUID per l'entità. E un mucchio di metodi virtuali, che agiscono ciascuno verso un singolo tipo di input. Sto pianificando di organizzare la struttura di memoria delle entità in un Quad-Tree, con oggetti che si estendono su più quad da assegnare a entrambi e che i quad siano suddivisi fino a non più di 8 elementi in un quad, dopodiché verrà eseguita una ricerca lineare, dal più alto elemento GUID al più basso. L'input viene eseguito tramite il listener di eventi e esegue le funzioni virtuali su un'entità.
La parte successiva è la Classe entità o Modello, che contiene il tipo per tutte le entità. Unità, menu, ecc. Ecc. La classe Entity di base ha funzioni virtuali per tutti i tipi di clic, oltre che per lo scorrimento, il passaggio del mouse e l'input da tastiera. Eseguendo le funzioni virtuali finali nelle classi derivate, aggiorno il mio Gamestate,
Infine, nel mio Gamestate o View, sto registrando quali Entità sono attive sullo schermo, così come lo stato di tutte le altre entità. Qui è anche dove registro / non registro le cose dal listener di eventi. Contiene anche metodi che dirigono ciò che viene mostrato all'utente.
Ora, il mio problema è così. Per le entità stazionarie, o quelle che si muovono raramente, come le voci di menu e le barre di scorrimento, il costo per ricalcolare il quad-tree per loro è piuttosto basso. Gli oggetti Menu non devono sempre essere aggiunti o rimossi ogni frame. Il problema arriva quando ho a che fare con la visualizzazione di più entità unitarie (potrebbero esserci fino a diverse centinaia sullo schermo alla volta). Si muovono su un piano 2D e possono spostarsi tra i riquadri di delimitazione abbastanza rapidamente. Assemblare il quad tree è qualcosa come nlog ^ 2n nello scenario peggiore, in cui tutto è raggruppato o abbastanza grande da estendersi su più caselle di delimitazione. Quindi non penso che ricostruirlo ogni fotogramma sia la soluzione migliore.
Anche l'annullamento della registrazione degli oggetti sembra un problema, poiché dovrò attraversare l'intero albero per trovare il GUID particolare, a meno che non crei un secondo albero di entità GUID e lo utilizzi per indicare il nodo particolare su un albero che contengono puntatori al nodo (i) sull'altro albero che contengono il GUID di quell'entità. O potrei semplicemente ricostruire l'intero albero ogni aggiornamento gamsite. Quale, di nuovo, sarebbe costoso.
C'è un modello di progettazione migliore per impostare la mia interfaccia utente, o almeno la parte Listener di eventi di esso, e in caso affermativo, che cos'è?