La maggior parte dei motori e dei framework decenti offrono le funzionalità di cui hai bisogno e non ti ostacolano mai.
Fanno? Dipende piuttosto da cosa stai facendo, graficamente parlando.
Per molti tipi di giochi, ci sono risposte standard per domande grafiche. Il gioco 2D medio, ad esempio, può essere gestito bene con l'abilità 2D, ad esempio XNA / MonoGame. Sono solo gli sprite, che possono venire in lotti per il terreno, possono essere ruotati e così via.
Ma cosa succede se il vostro gioco usato per essere il gioco medio 2D, poi si legge su qualche tecnica fresca, come l'utilizzo di una mappa di altezza per costruire un impostore che ha l'effetto di profondità rispetto allo schermo. E tu vuoi farlo.
Ora stai impiegando una mappatura normale e forse anche una mappatura di parallasse. Tutto nello stesso contesto di "rendering sprite", ma che richiede più di un sacco di motori 2D puri in grado di gestire. Nello specifico, richiede una "sprite blitting" multi-strutturata, che non è qualcosa che molti motori 2D possono fare.
Cosa fai se il tuo motore non riesce ad adattarsi a te? Ciò significa che devi fare più passaggi, uno per il colore e uno per l'illuminazione tramite una normale mappa. Ma ciò non funziona, perché è necessario il campo di altezza della mappa normale per utilizzare la mappatura di parallasse nella ricerca del colore. E ora? Hai bisogno dell'alfa per fare trasparenza, quindi non puoi rubare l'alfa. E il motore non supporta i multitexture.
Quindi devi scegliere una delle seguenti opzioni:
- Abbandona l'idea. Ciò significa che il tuo gioco è funzionalmente limitato dal tuo motore.
- Hack il motore per avere multitexture. Supponendo che tu abbia accesso al codice sorgente, ora lo stai prendendo in giro per cercare il codice di qualcun altro. Questo significa anche che è necessario mantenerlo e non romperlo con il tuo inciampare.
- Fai il meglio che puoi, entro i limiti del motore. Quindi puoi ottenere la parallasse sulle mappe normali, ma non sui colori. Potrebbe non essere esattamente quello che volevi, ma è meglio di niente.
Ad esempio, prendi Geometry Wars. La maggior parte dei motori 2D farebbe schifo a questo tipo di elementi visivi, dal momento che la maggior parte di essi è costruita attorno al disegno di sprite, non a linee. È un gioco che richiede un tipo di renderer molto specializzato.
Alla fine della giornata, devi assumerti la responsabilità degli elementi del tuo gioco che sono importanti per le esigenze del tuo gioco. Se l'aspetto visivo del tuo gioco è sviluppato principalmente dallo stile artistico delle immagini e dei modelli che usi, piuttosto che da effetti specifici, allora usare una soluzione preconfezionata va bene. Ma se lo stile di visualizzazione del tuo gioco è definito in modo significativo dal codice di rendering personalizzato, è probabile che un motore standard possa diventare un serio limite se decidi di fare cose fuori dagli schemi.
Inoltre, c'è un problema molto pratico: non tutti i motori di gioco sono ugualmente portatili.
Con il recente aumento delle piattaforme mobili, il mercato dei giochi si estende su numerosi sistemi operativi e dispositivi di interfaccia utente. Non tutti i motori funzionano su tutti i dispositivi. E se il tuo motore non funziona su una piattaforma, non avrai sicuramente il tempo di farlo funzionare su una piattaforma . Dopotutto, ecco perché hai usato un motore in primo luogo, giusto?
Se per te è importante che il tuo gioco funzioni su una particolare piattaforma, allora devi assumertene di nuovo la responsabilità. E il modo "più semplice" per garantire il successo è farlo da soli. Costruire un motore in grado di funzionare su più piattaforme, magari impiegando framework specifici per piattaforme più semplici dove necessario per gestire alcuni dettagli di basso livello. In questo modo, se si rompe, è il tuo codice; sei la persona migliore per poterlo riparare.