Da dove comincio se voglio scrivere un gioco C ++ 2d? [chiuso]


17

Sono uno sviluppatore web C # e voglio espandere il mio skillset e divertirmi mentre lo faccio. Conosco alcune delle basi di C ++ e mi piacerebbe scrivere un semplice motore di gioco / gioco 2d per me stesso usando C ++. Di quali altre librerie o SDK ho bisogno e dove troverei alcuni tutorial e risorse informative per andare avanti?

Ho già esaminato XNA con C #. Ci sono molte risorse per questo, ma preferirei utilizzare prodotti non Microsoft. Il punto è divertirsi un po 'mentre si diventa un programmatore meglio arrotondato.

Si prega di notare che non sto chiedendo il posto migliore per iniziare. Sto solo chiedendo un punto di partenza.

Grazie per qualsiasi aiuto!

Risposte:


27

Il punto di partenza standard (nella mia esperienza) per gli sviluppatori di giochi C ++ è SDL . Devi avere le mani un po 'più sporche con questo di quanto non faccia XNA.

Se vuoi provare qualcosa di un livello leggermente superiore, suggerirei SFML . Gestisce alcune delle attività più umili per te, ma devi comunque tenere d'occhio l'utilizzo della memoria, ecc.


1
Esaminerò quelli. Il mio più grande problema con XNA è che era così semplice che non mi sentivo come se stessi davvero imparando le cose di livello inferiore che mi interessa esplorare.
quakkels,

6
SFML ha un bel design, ma è ancora un po 'difettoso ed è in procinto di una grande riprogettazione dell'API - Non lo userei per giochi più complessi fino a quando la prossima versione non sarà ben rifinita.
Bitgarden,

Se vuoi qualcosa di un po 'più impegnativo di SDL, prova ClanLib . Come XNA supporta l'accelerazione hardware, ma funziona anche su Linux e anche in esclusiva 2D.
ChrisC,

2
Puoi anche andare dritto alla gola - OpenGL è il mio preferito personale (puoi avvolgerlo con SDL o SFML)
ultifinitus

9

Suggerirei di usare SDL . È passato molto tempo, quindi la documentazione e il supporto sono abbastanza buoni, ed è uno dei modi più semplici che conosco per ottenere una superficie di disegno sullo schermo. Ti darà la pratica di scrivere classi in C ++ (dal momento che probabilmente vorrai avvolgere molto le chiamate della funzione C SDL) e ti darà anche esperienza nell'uso di puntatori e riferimenti e nella gestione di base della memoria. La gestione della propria memoria è una delle principali differenze tra C ++ e C #.


9

Personalmente, sceglierei Allegro 5 , per i seguenti motivi:

  1. Ha un sistema di compilazione basato su CMake. Ciò rende molto più semplice rispetto alla maggior parte dei sistemi di compilazione per lavorare su più piattaforme. Sembra una cosa minore, ma nel complesso è piuttosto importante. Rende la costruzione della biblioteca molto più semplice.

  2. SFML è ancora in un flusso significativo. 2.0 è un cambiamento abbastanza sostanziale. Considerando che Allegro ha già subito un cambiamento significativo con la versione 5, e ora si tratta di stabilità.

  3. Copre la modularità in modo diverso dall'SFML. Con SFML, chiedi componenti specifici, ma li ottieni tutti. Se si richiede il componente grafico, si ottiene tutto il componente grafico. Con Allegro 5, ottieni sempre il componente grafico. Ma se non si desidera utilizzare i caricatori di bitmap Allegro, non è necessario; puoi usare il tuo.

  4. Ha un'ottima documentazione. SFML utilizza la documentazione in stile Doxygen, ma anche questo è piuttosto spartano. Considerando che Allegro 5 è più completo, con funzioni raggruppate in base a sistemi specifici che coprono. Non è perfetto, ma è nel complesso migliore.

  5. Sono abbastanza intelligenti da non provare a fare thread. Con C ++ 11 / Boost.Threads ampiamente disponibili o proprio dietro l'angolo, l'utilizzo di un altro wrapper di thread può essere più di un semplice problema: può essere pericoloso far funzionare correttamente il codice.


Perché preferiresti / suggerire Allegro su SDL o SFML?
Quazi Irfan,

@iamcreasy: se insisti.
Nicol Bolas,

Continui a non menzionare SDL ...
Ingegnere

@NickWiggill: SDL ha thread e sistemi di build specifici della piattaforma. Non ho sentito il bisogno di chiamarlo per qualcosa di specifico.
Nicol Bolas,

@nicol-bolas non hai menzionato i contro di Allegro. Come una quantità molto bassa di confronto tutorial.
Quazi Irfan,

4

Penso che un posto fantastico per iniziare sia LazyFoo . Questo ti farà funzionare con SDL più velocemente di qualsiasi altro posto che abbia mai visto. Ti consiglierei di entrare rapidamente in OpenGL (non appena riesci a digerirlo) perché otterrai molto più botto per la tua programmazione in dollari, con l'accelerazione hardware. Se segui questa strada, ti consiglio questa guida .


2

Consiglierei SFML se stai usando c ++. Ti porterà rapidamente qualcosa sullo schermo e usarlo con il tuo codice di gioco c ++ è semplice.


2
  • SFML - il bambino nel gruppo, ma potenzialmente più facile da usare da quello che ho letto.
  • SDL - la via di mezzo. Biblioteca molto matura, ragionevole, generalmente concisa se un po 'arcana di volta in volta, e una scelta molto comune. L'impostazione dei formati di visualizzazione può essere un po 'un bastardo, ho usato i tutorial di Lazyfoo per aiutare su quel fronte.
  • Allegro - Geriatrico, esiste dai tempi di Atari ST. Per questo motivo, gran parte del codice di rendering 2D (che penso sia solo in Allegro 4) è piuttosto veloce poiché la logica è stata costruita per sistemi con specifiche molto più basse. Personalmente non lo trovo molto intuitivo, anche considerando la documentazione.

Considerando che OpenGL accelera il lato 2D delle cose in questi giorni, non è così importante avere accesso ai renderer software veloci che Allegro e SDL hanno (o avevano nelle versioni precedenti). Tuttavia, quando scelgo una biblioteca, mi concentro sulla maturità del progetto, sulla base di utenti e sui documenti più che sulla velocità (purché la velocità sia ragionevole), e direi che SDL e Allegro vincono su quei fronti. SDL ha anche rilasciato tre titoli AAA come Civ: Call to Power.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.