Eu sou novo no mundo dos desenvolvedores de jogos.
Eu tenho um projeto bastante grande em mente (aprendo definindo-me desafios: P) e estou me perguntando qual é o melhor mecanismo / estrutura / linguagem para um jogo 2D com milhares de sprites / atores na tela ao mesmo tempo. Coisas do tipo de metal nu. Ainda preciso aumentar e diminuir o zoom com tantos atores ao mesmo tempo.
Este jogo não terá elementos 3D.
Alguma ideia?
Sugestões?
Respostas:
C # com XNA
Como você é novo nisso, o XNA teria a vantagem de também ser um ótimo lugar para começar. Desde a criação de um novo projeto até a exibição de um sprite 2D na tela, são necessárias 5 linhas de código:
Não fica muito mais fácil do que isso. Também tem a vantagem de ter um monte de amostras educacionais disponíveis para ele.
O problema é seu requisito de desempenho. Mas eu consegui desenhar milhares de sprites antes no XNA sem nenhum problema. No entanto, não havia código de jogabilidade por trás disso, e meu computador é de última geração, portanto os resultados seriam tendenciosos. Mas, com uma otimização cuidadosa, provavelmente funcionaria. Então esta é a minha recomendação.
C # com SharpDX ou SlimDX
Ainda permanecendo no domínio C # gerenciado, você também pode voltar um passo e considerar o uso do SharpDX, que é um novo wrapper gerenciado do DirectX, e eles afirmam que é cerca de 6 vezes mais rápido que o XNA. Isso deve ter energia suficiente para suas necessidades. E é multiplataforma.
Há também o SlimDX a considerar.
C ++ com DirectX / OpenGL
E se você continuar avançando nessa direção, finalmente alcançará o domínio C ++ puro com o DirectX / OpenGL. Se você decidir seguir esse caminho (que, a propósito, será muito mais difícil de lidar nesse estágio), há algumas coisas que você pode fazer para facilitar sua vida.
Por exemplo, você pode usar o SDL para criar a janela para você e cuidar da entrada, e o FMOD para lidar com o áudio, o que eu achei muito mais fácil de trabalhar do que seus colegas nativos.
Também não sei como é hoje em dia, mas na última vez em que trabalhei com eles, achei bastante fácil fazer coisas em 2D no DirectX, graças à classe D3DXSprite, que o IIRC era bastante semelhante ao SpriteBatch da XNA, enquanto no OpenGL I teve que implementar tudo do zero (ou seja, brincar com quads texturizados, projeções ortográficas e implementar o lote).
fonte
Eu recomendo o SFML , pois ele permite gerenciar facilmente sprites 2D e aumentar / diminuir o zoom (graças a uma classe "camera" existente). Com essas abstrações, achei mais simples de usar que o XNA. Não tenho estatísticas rígidas sobre o desempenho, mas como ele usa C ++ e é processado através do OpenGL, acho que pode ser mais rápido que o XNA.
Por coincidência, estou trabalhando em um jogo semelhante usando SFML. Ele pode gerenciar mais de 1000 sprites em movimento a 50 FPS no meu laptop, enquanto executa a lógica do jogo (colisão entre sprites, etc.).
Aqui está uma captura de tela deste programa SFML em execução no meu laptop de 3 anos com gráficos integrados, a 25 FPS (800x600):
Eu acho que existem mais de 1000 sprites exibidos.
fonte