Sto cercando di progettare un sistema di entità basato su componenti per scopi di apprendimento (e in seguito utilizzarlo su alcuni giochi) e sto avendo dei problemi quando si tratta di aggiornare gli stati delle entità.
Non voglio avere un metodo update () all'interno del componente per prevenire dipendenze tra i componenti.
Quello che attualmente ho in mente è che i componenti contengono dati e componenti di aggiornamento dei sistemi.
Quindi, se ho un semplice gioco 2D con alcune entità (ad esempio giocatore, nemico1, nemico2) che hanno componenti Trasforma, Movimento, Stato, Animazione e Rendering, penso che dovrei avere:
- Un sistema di movimento che sposta tutti i componenti del movimento e aggiorna i componenti dello stato
- E un RenderSystem che aggiorna i componenti di animazione (il componente di animazione dovrebbe avere un'animazione (ovvero un set di frame / trame) per ogni stato e aggiornarlo significa selezionare l'animazione corrispondente allo stato corrente (es. Jumping, moving_left, ecc.), E aggiornamento dell'indice dei frame). Quindi, RenderSystem aggiorna i componenti di rendering con la trama corrispondente al fotogramma corrente dell'Animazione di ciascuna entità e rende tutto sullo schermo.
Ho visto alcune implementazioni come il framework Artemis, ma non so come risolvere questa situazione:
Diciamo che il mio gioco ha le seguenti entità. Ogni entità ha un insieme di stati e un'animazione per ogni stato:
- giocatore: "inattivo", "moving_right", "jumping"
- nemico1: "moving_up", "moving_down"
- nemico2: "moving_left", "moving_right"
Quali sono gli approcci più accettati al fine di aggiornare lo stato attuale di ciascuna entità? L'unica cosa a cui riesco a pensare è avere sistemi separati per ogni gruppo di entità e componenti separati di Stato e Animazione, quindi avrei PlayerState, PlayerAnimation, Enemy1State, Enemy1Animation ... PlayerMovementSystem, PlayerRenderingSystem ... ma penso che sia un male soluzione e rompe lo scopo di avere un sistema basato su componenti.
Come puoi vedere, sono abbastanza perso qui, quindi apprezzerei molto qualsiasi aiuto.
EDIT: Penso che la soluzione per far funzionare questo come intendo sia questa:
Il componente statistico e il componente animazione sono abbastanza generici da poter essere utilizzati per tutte le entità. I dati che contengono saranno il modificatore per cambiare cose come quali animazioni vengono riprodotte o quali stati sono disponibili. - Byte56
Ora sto cercando di capire come progettare questi 2 componenti in modo abbastanza generico da poterli riutilizzare. Avere un UID per ogni stato (ad es. Camminare, correre ...) e archiviare animazioni in una mappa nell'AnimationComponent codificato da questo identificatore può essere una buona soluzione?
statecomponent
e animationcomponent
abbastanza generico per essere utilizzato per tutte le entità. I dati che contengono saranno il modificatore per cambiare cose come quali animazioni vengono riprodotte o quali stati sono disponibili.