O XNA é bom para o desenvolvimento profissional do Xbox 360?


16

Quero começar a desenvolver para o meu Xbox 360 e ouvi falar da estrutura XNA que pode ter como alvo o PC e o Xbox. Isso soa como uma opção atraente, já que meus clientes também podem usar o jogo / aplicativo em computadores normais.

No entanto, sou muito novo na cena Xbox. O XNA é apenas para desenvolvimento hobby e não é recomendado para desenvolvimento de aplicativos corporativos ou semi-profissionais? O XNA não possui os recursos de uma solução desenvolvida em C ++ ou reduz bastante o desempenho de um jogo / aplicativo em execução no Xbox?

É possível segmentar o Xbox usando C # e sem XNA? Quais são as vantagens?

A programação de baixo nível seria em C ++, trabalhando diretamente com o DirectX. Quais são as vantagens?

Respostas:


15

A resposta curta: Sim .

XNA é apenas uma ferramenta. É adequado para todos, exceto os jogos com mais processador e graficamente. Se você está pensando em XNA para um jogo do Xbox 360, aqui está o que você perderá:

  • Acesso à unidade SIMD / Vector para realizar cálculos de ponto flutuante da CPU muito, muito rápidos
  • Capacidade de usar código de idioma nativo que provavelmente será um pouco mais rápido que C #
  • Capacidade de ficar um pouco mais preguiçoso com a maneira como você aloca memória
  • Os jogos XBLIG têm acesso a apenas 4 dos 6 núcleos (mas ainda temos todas as 3 CPUs, e eles também não são núcleos completos, para não perdermos muito) - não tenho certeza se isso se aplica a XNA não XBLIG jogos
  • Acesso total ao DirectX para realizar truques gráficos realmente obscuros

Pode haver mais - isso está no topo da minha cabeça.

(Especulação: se você é um desenvolvedor profissional (como em: tem um devkit), acho que você pode usar o XNA com código nativo, o mesmo que P / Invoke no Windows. O melhor dos dois mundos. Você teria que perguntar à Microsoft. Veja também XDK .)

A linha inferior é que um jogo XNA é quase tão rápido quanto um jogo nativo e pode fazer quase o mesmo material. Eu sugiro que você o use, a menos que encontre um motivo atraente para não fazê-lo.

Não sei se existe algum tipo de DirectX gerenciado para o 360. Talvez o SlimDX seja um bom lugar para começar.


1
O que é "XBLIG"?
Ricket 28/10/10

2
Jogo indie do Xbox live
dotminic 28/10/10

Existem apenas três núcleos e temos acesso a todos eles. Você não tem acesso a 2 threads. Um desses threads é para o XNA, o outro é um thread ao qual ninguém tem acesso ao fazer jogos, como é para o XBOX OS.
Olhovsky

1
Além disso, você não fica preguiçoso com a alocação de memória. Exceto para jogos muito simples, você precisa agrupar todos os objetos (o que envolve um modelo de alocação / tipo livre - não é melhor que C ++) para evitar coletas de lixo caras no .NET compact CLR, que usa uma abordagem de coleta geracional.
precisa

12

A menos que você esteja disposto a pagar US $ 10.000 por um devkit XBOX ou Playstation, o único console para o qual você pode desenvolver é o XBOX 360, e a única maneira de fazê-lo é com o XNA.

Para o desenvolvimento profissional, a menos que você realmente precise obter 100% do poder de processamento do XBOX (que a maioria dos jogos, especialmente os jogos 2D não precisam), o XNA, na minha opinião, é realmente muito melhor para o desenvolvimento.

Alguns erros que outros respondentes fizeram:

O XBOX possui apenas 3 núcleos. Você obtém acesso a todos eles com o XNA.

Cada núcleo possui hyperthreading e suporte para 2 hyperthreads. Você só tem acesso a 4/6 threads. Um desses threads é para o XNA. O outro é um segmento ao qual nenhum desenvolvedor de jogos tem acesso, pois é usado pelo sistema operacional XBOX.

O C # no XBOX é muito mais lento que o C # no Windows. O XBOX usa o .NET compact CLR, que é muito leve e carece de muitas das otimizações do CLR de desktop. Os recursos de segurança do XBOX impedem que os programas modifiquem seu próprio código-fonte. Isso dificulta muito a execução do código .NET, e muito menos a execução rápida . Parte do que torna o código gerenciado competitivo no desempenho com o código nativo C ++, é que o CLR pode modificar seu próprio código para otimizar a coerência do cache. A equipe de desenvolvimento do XNA precisa percorrer alguns grandes bastidores para conseguir que o C # seja executado no XBOX, e há um custo de desempenho associado a esses bastidores.

Você não fica muito preguiçoso com a alocação de memória. O XNA no Windows simplifica bastante a alocação de memória, como seria de esperar de um ambiente gerenciado. No entanto, no XBOX, o .NET compact CLR usa uma abordagem de varredura e compacta para a coleta de lixo, e a abordagem típica para evitar a gagueira no jogo devido a coleções é evitar coleções por completo. Isso requer o uso de conjuntos de objetos para suas classes e o uso de estruturas para objetos menores, onde você normalmente usa classes no ambiente Windows. O pool de objetos geralmente requer um modelo de gerenciamento de objetos alocado / livre, o que não é pior (e talvez um pouco melhor) que o gerenciamento de memória C ++.

Dito isso, o desenvolvimento em C # / XNA ainda é muitas vezes mais rápido e fácil do que o desenvolvimento em C ++ sem uma API DirectX (que é XNA).

Aqui está o status de um jogo que estou criando no XNA, após 4 semanas de trabalho:

Captura de tela do jogo após 4 semanas de desenvolvimento.

Isso deve lhe dar uma noção de quão incrivelmente rápido o desenvolvimento com a biblioteca / API XNA está em combinação com C #.

Essa captura de tela é renderizada pelo XBOX a cerca de 65FPS.

Se você é um desenvolvedor de jogos amadores e deseja criar jogos para um console, o XNA + XBOX não é apenas a sua única opção realista, mas também uma opção incrível, um ambiente de desenvolvimento divertido e muitos jogos do XBOX Live Arcade. feito com o XNA e fez centenas de milhares de dólares fazendo isso. ( Limbo por exemplo.)


1
Uma das respostas mais claras que tive sobre o XNA dev. Obrigado.
keyle

4

XNA é uma lâmina de dois gumes; é relativamente fácil de usar, mas muito extensível e personalizável. O problema é que, com base em uma linguagem gerenciada e com uma implementação do Compact Framework, reduzir o desempenho de um jogo complexo pode ser muito doloroso e frustrante.

Você só pode implantar no seu Xbox via C # / XNA ou C ++ / DirectX, mas a segunda opção requer a qualificação para uma licença XBLA e o pagamento do devkit, que pode ser muito caro (~ 10000 $).

E lembre-se de que o Xbox é um sistema fechado. Esqueça qualquer interação direta de TCP / IP, você só pode se comunicar com outros consoles presentes no Xbox Live! rede e você não pode fazer conexões HTTP não processadas.

Portanto, se você estiver pensando em um jogo, experimente o XNA e mude para um devkit se precisar de mais poder bruto (e você tiver o dinheiro). Se você está pensando em um aplicativo ... basta direcionar para outra plataforma.


Gostaria de saber como são diferentes o XNA e o devkit ...
Spooks 28/10

XNA é uma API C # de alto nível. Um devkit é um console especial onde você pode implantar jogos escritos com C ++ e DirectX, tendo assim um acesso de nível mais baixo e melhor desempenho geral.
R2d2rigo 28/10

assim .. completamente diferente
Spooks
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.