Eu amo os recursos do XNA, mas quero entrar no jogo em c ++. O problema é que agora preciso me preocupar com tudo, desde carregar um arquivo png até abrir uma janela. Isso é um pouco chato.
Eu realmente gostaria que uma versão c ++ do XNA resolvesse esses problemas para mim.
Você deve dar uma olhada no DirectX Tool Kit, se ainda não o fez ... É uma biblioteca C ++ para programação Direct3D 11 que empresta explicitamente o design da classe XNA Game Studio.
Chuck Walbourn
Respostas:
16
Eu recomendaria que você olhasse para SFML e Polycode .
Eu acho que as respostas aqui estão meio que perdendo o objetivo. É irritante ter que vincular a dez bibliotecas diferentes, como Freetype, libpng, tinyxml, Ogg, Vorbis, etc., para obter alguns recursos básicos do XNA.
O SFML é uma API C ++ multimídia gratuita que fornece acesso de baixo e alto nível a gráficos, entradas, áudio etc. Em certo sentido, é semelhante ao XNA, mas não segura sua mão. Por exemplo, SFML não tem uma classe Model.
Se você planeja usar modelos em seus jogos, deve usar o Assimp .
Assimp adiciona suporte para importar os seguintes formatos:
Collada(.dae )Blender3D(.blend )3dsMax3DS(.3ds)3dsMax ASE (.ase )WavefrontObject(.obj )StanfordPolygonLibrary(.ply )AutoCAD DXF (.dxf )LightWave(.lwo )Modo(.lxo )Stereolithography(.stl )
AC3D (.ac )Milkshape3D(.ms3d )Quake I Mesh(.mdl )Quake II Mesh(.md2 )Quake III Mesh(.md3 )Quake III BSP (.pk3 )Biovision BVH (.bvh )DirectX X (.x )BlitzBasic3D(.b3d )Quick3D(.q3d,.q3s )Ogre XML (.mesh.xml )IrrlichtMesh(.irrmesh )NeutralFileFormat(.nff )Sense8WorldToolKit(.nff )ObjectFileFormat(.off )PovRAYRaw(.raw )TerragenTerrain(.ter )3DGameStudio(.mdl )3DGameStudioTerrain(.hmp )IzwareNendo(.ndo )
O Polycode é uma estrutura gratuita, de código aberto e de plataforma cruzada para código criativo. Você pode usá-lo como uma API C ++ ou como uma linguagem de script independente para obter acesso fácil e simples a gráficos 2D e 3D acelerados, sombreadores de hardware, programação de som e rede, mecanismos físicos e muito mais.
A API principal do Polycode é escrita em C ++ e pode ser usada para criar aplicativos nativos portáteis.
Além da API C ++ principal, o Polycode oferece um sistema de script baseado em Lua com seu próprio conjunto de ferramentas de compilação. A API Lua espelha a API C ++ e pode ser usada para criar protótipos com facilidade e até publicar aplicativos completos em várias plataformas sem compilar C ++.
O Polycode é de código aberto, o que significa que você pode aprender como as coisas são feitas nos bastidores. Além disso, ele usa o Assimp para carregar modelos, para que você não precise se preocupar em vincular manualmente ao Assimp.
Esclarecimentos menores: o Polycode não usa o assimp para carregar modelos, mas possui uma ferramenta baseada em assimp para converter modelos em um formato que pode ser carregado.
CIB
4
Existem literalmente centenas de bibliotecas por aí que lidam com todos os tipos de aspectos do desenvolvimento de jogos. Do carregamento de imagens, à abertura e gerenciamento de janelas, à renderização, ao som, à física etc.
O que não existem são muitas soluções de "balcão único", onde você obtém tudo de uma só vez. Esse é um dos benefícios do XNA. Você geralmente precisa reunir várias bibliotecas para criar um mecanismo. Isso oferece uma grande flexibilidade, como se um componente estivesse ausente, você pode (relativamente) facilmente trocá-lo por outro. Mas, ao mesmo tempo, requer mais trabalho.
Realmente, por que você está tão desligado da linguagem de programação que deseja usar? Parece-me que você realmente gosta do XNA e deseja usá-lo para o desenvolvimento de jogos. Então vá fazer isso.
Você pode usar o D3DX e o DXUT no início, que não são muito parecidos com o XNA, mas ajudam bastante na configuração do ambiente, como criar uma janela, executar o loop principal e ter algumas funções úteis, como D3DX11CreateTextureFromFile () - você terá que gerenciar o ponteiro, mas não é isso difícil. Também existem muitas bibliotecas que você pode usar no C ++, que você pode substituir por sua própria se quiser melhorar o desempenho ou o que quiser alterar.
As bibliotecas D3DX e o DXUT são mais adequadas para D3D9 e 10, e o DXUT vem com seu código-fonte. Para o DX11, eles selecionaram algumas funções dessas bibliotecas, mas espero que elas ainda tenham as mais úteis, e se bem me lembro agora, elas fornecem a estrutura de efeitos no formato de código-fonte (se você tiver paciência para explorá-la).
Aprendi muito mais ao trabalhar em níveis mais baixos do que nas pirâmides de estruturas, então não posso dizer que você use o XNA, mas isso depende principalmente dos seus objetivos.
Todas as versões do D3DX estão obsoletas. As bibliotecas de utilitários Direct3D 11.x 'modernas' são DirectXTex , DirectXTK e DirectXMesh e DirectXMath no Windows 8.x SDK. A versão mais recente do Effects 11 e do DXUT11 está no CodePlex para pessoas que portam bases de código mais antigas e estão satisfeitas apenas com os aplicativos de área de trabalho Win32.
Chuck Walbourn
1
Se você está apenas se familiarizando com a linguagem c ++, eu recomendaria o uso de uma biblioteca simples como SDL para obter experiência no desenvolvimento de jogos e depois programar usando o openGL.
Respostas:
Eu recomendaria que você olhasse para SFML e Polycode .
Eu acho que as respostas aqui estão meio que perdendo o objetivo. É irritante ter que vincular a dez bibliotecas diferentes, como Freetype, libpng, tinyxml, Ogg, Vorbis, etc., para obter alguns recursos básicos do XNA.
SFML
http://www.sfml-dev.org/features.php
O SFML é uma API C ++ multimídia gratuita que fornece acesso de baixo e alto nível a gráficos, entradas, áudio etc. Em certo sentido, é semelhante ao XNA, mas não segura sua mão. Por exemplo, SFML não tem uma classe Model.
Se você planeja usar modelos em seus jogos, deve usar o Assimp .
Assimp adiciona suporte para importar os seguintes formatos:
Polycode
http://polycode.org/features/
O Polycode é de código aberto, o que significa que você pode aprender como as coisas são feitas nos bastidores. Além disso, ele usa o Assimp para carregar modelos, para que você não precise se preocupar em vincular manualmente ao Assimp.
fonte
Existem literalmente centenas de bibliotecas por aí que lidam com todos os tipos de aspectos do desenvolvimento de jogos. Do carregamento de imagens, à abertura e gerenciamento de janelas, à renderização, ao som, à física etc.
O que não existem são muitas soluções de "balcão único", onde você obtém tudo de uma só vez. Esse é um dos benefícios do XNA. Você geralmente precisa reunir várias bibliotecas para criar um mecanismo. Isso oferece uma grande flexibilidade, como se um componente estivesse ausente, você pode (relativamente) facilmente trocá-lo por outro. Mas, ao mesmo tempo, requer mais trabalho.
Realmente, por que você está tão desligado da linguagem de programação que deseja usar? Parece-me que você realmente gosta do XNA e deseja usá-lo para o desenvolvimento de jogos. Então vá fazer isso.
fonte
Você pode usar o D3DX e o DXUT no início, que não são muito parecidos com o XNA, mas ajudam bastante na configuração do ambiente, como criar uma janela, executar o loop principal e ter algumas funções úteis, como D3DX11CreateTextureFromFile () - você terá que gerenciar o ponteiro, mas não é isso difícil. Também existem muitas bibliotecas que você pode usar no C ++, que você pode substituir por sua própria se quiser melhorar o desempenho ou o que quiser alterar.
As bibliotecas D3DX e o DXUT são mais adequadas para D3D9 e 10, e o DXUT vem com seu código-fonte. Para o DX11, eles selecionaram algumas funções dessas bibliotecas, mas espero que elas ainda tenham as mais úteis, e se bem me lembro agora, elas fornecem a estrutura de efeitos no formato de código-fonte (se você tiver paciência para explorá-la).
Aprendi muito mais ao trabalhar em níveis mais baixos do que nas pirâmides de estruturas, então não posso dizer que você use o XNA, mas isso depende principalmente dos seus objetivos.
fonte
Se você está apenas se familiarizando com a linguagem c ++, eu recomendaria o uso de uma biblioteca simples como SDL para obter experiência no desenvolvimento de jogos e depois programar usando o openGL.
fonte