Ho cercato di rendere il titolo della domanda il più applicabile possibile, ma non sono sicuro di averlo scritto così bene. È stato causato da un problema molto specifico che ho, e per il resto di questa domanda cercherò di descriverlo.
Sto tentando di scrivere un piccolo motore di gioco con grafica, fisica e collisioni *. Sto cercando di implementare ciascuna di queste cose separatamente; è perfettamente concepibile che io abbia un oggetto grafico, fisicamente in movimento, che non può collidere (effetti di fuoco?) o un oggetto di collisione che non è reso o governato dalla fisica (barriera invisibile). Tuttavia, un gran numero di oggetti avrà bisogno di tutti e tre.
Sono abbastanza sicuro di poter isolare i tre pezzi quasi completamente nelle loro classi, con l'unica eccezione che tutti devono fare riferimento alla stessa posizione e all'orientamento angolare del loro oggetto.
Inizialmente, pensavo di mettere ogni cosa nella sua classe e solo costruire ogni oggetto di gioco reale con ereditarietà multipla, ma alla luce del fatto che tutti hanno bisogno di condividere i dati non ero così sicuro che quello funzionerebbe.
L'opzione successiva consisteva nel far inizializzare ogni oggetto con i puntatori ai dati di posizione e orientamento appropriati, ma mi sentivo strano trattare quelli come membri speciali. . . Vorrei che ogni classe agisse il più ignorante possibile degli altri, e non farei mai i suggerimenti se stessimo progettando ogni classe in modo indipendente.
Potrei anche permettere a ogni classe di vivere con i propri dati di posizione e fare in modo che la classe di combinazione (tramite amicizia o getter / setter) li costringa tutti a coincidere, ma anche questo non sembrava giusto.
Ho provato a cercare su Google informazioni su ciò che è in genere fatto, ma la maggior parte di tutto ciò che ho trovato si è concentrata su una parte specifica del sistema e non ho detto molto sull'integrazione di tutto. Sono semplicemente troppo filosofico, o c'è un modo migliore per farlo?
Se è importante, sto usando C ++.
Grazie.
* So che implementarlo da solo non ha senso, ma è solo per divertimento.