Supponiamo di avere un gioco in cui ci sono molte (molte molte) entità che svolgono alcune funzioni, non tutte sono costantemente necessarie o devono essere considerate in ogni frame. Il problema concreto a cui sto lavorando in cui è presente questo problema è una simulazione dettagliata di un corpo compresi i suoi organi.
Nel gioco ogni creatura ha il suo corpo che è separato in parti più piccole (busto, gambe, ecc.) Ea volte queste parti contengono organi, che svolgono una funzione specifica all'interno del corpo. Se un organo attualmente serve uno scopo o è attivo non è mai realmente chiaro. Dopotutto, un animale potrebbe avere lo stomaco vuoto che quindi non ha bisogno di digerire nulla. Sarebbe abbastanza ridicolo controllare o simulare ogni oggetto in ogni frame e molto costoso non appena avrai molte creature nel mondo. Quindi stavo pensando a un modo per distinguere in modo intelligente tra gli oggetti che devono essere aggiornati e quelli che non lo fanno.
Quello che ho trovato sembra una soluzione almeno ok. Crea una semplice coda / stack (essenziale che ogni elemento venga rimosso non appena viene letto; l'ordine è irrilevante) chiamato "stack di attenzione" dove risiedono gli oggetti che devono essere simulati. Gli oggetti che richiedono attenzione si metterebbero semplicemente nella pila o vi sarebbero posti da altri oggetti. Questi oggetti implementerebbero probabilmente una semplice interfaccia con una funzione simulate ().
Applicato al mio precedente esempio di digestione, ciò significherebbe:
Il giocatore sceglie qualcosa da mangiare (supponiamo che sia pane) dall'inventario e lo mette nella bocca del suo personaggio e la bocca viene messa nella pila dell'attenzione. Nel frame successivo la bocca viene presa dalla pila e viene chiamata la sua funzione simulate (). Dal momento che è una bocca, sarebbe ragionevole simulare la masticazione qui. Ciò potrebbe continuare per alcuni fotogrammi in cui la bocca continua a mettersi in pila fino a quando non decide che il cibo è pronto per essere ingerito. In questo caso la bocca mette il pane masticato nello stomaco (so che non ci va direttamente, ma l'esofago viene lasciato fuori per semplificazione), che viene poi messo sulla pila dell'attenzione. Nel frame successivo viene avviata la simulazione del processo di digestione. E così via per il resto degli organi necessari.
Un problema prevedibile con questo sono oggetti inattivi. Un animale addormentato ne è un buon esempio. Potrebbe essere fatto come precedentemente descritto tenendo l'animale che dorme in pila e controllando ogni volta se deve svegliarsi, ma sembra dispendioso poiché è l'unica cosa che viene fatta. Per rendere più efficienti gli oggetti inattivi, avevo in programma di aggiungere una sorta di programma che memorizza i lavori da eseguire in un momento specifico. Se un animale va a dormire metterebbe un lavoro in quel programma che dovrebbe essere programmato per un certo periodo di tempo dopo che l'animale è andato a dormire. Questo lavoro si occuperebbe quindi di mettere di nuovo l'animale che dorme sulla pila dell'attenzione. Ora, potresti dire che un animale addormentato che non si trova sulla catasta dell'attenzione potrebbe perdere l'attacco di qualcosa perché la sua IA non è simulata,
Ora, onestamente, non so se questo è anche vicino a una soluzione elegante a questo problema a causa della mancanza di esperienza. Sono vicino a qualcosa di utilizzabile? Come si fa di solito o qualcuno ha suggerimenti o soluzioni migliori?