Depois de ler esse discurso retórico , acho que eles provavelmente estão certos (já que o Xenon e o CELL BE são altamente sensíveis ao código ignorante de ramificações e de cache ), mas ouvi dizer que as pessoas também estão fazendo bons jogos com C #.
Então, é verdade que é impossível fazer algo profissional com o XNA, ou o cartaz estava faltando o que faz do XNA a API assassina para o desenvolvimento de jogos?
Como profissional, não quero dizer que você pode ganhar dinheiro com isso, mas mais no sentido de que os jogos mais profissionais têm modelos de física e sistemas de animação que parecem estar fora do alcance de uma linguagem com barreiras tão definidas aos intrínsecos. . Se eu queria escrever um sistema de colisão ou mecanismo de dinâmica de fluidos para o meu jogo, não acho que o C # me ofereça a chance de fazer isso como gerador de código de tempo de execução e a falta de intrínseca atrapalha o desempenho.
No entanto, muitas pessoas parecem estar bem trabalhando dentro dessas restrições, criando seus jogos de sucesso, mas aparentemente evitando qualquer um dos problemas por omissão. Não notei que nenhum jogo XNA faça algo complexo além do que já é fornecido pelas bibliotecas ou manipulado por shaders. Isso evita a dinâmica mais complexa do jogo por causa das limitações do C # ou apenas as pessoas se concentrando em fazê-lo ?
Com toda a honestidade, não posso acreditar que a guerra de IA possa manter tantas unidades de IA sem uma abordagem orientada a dados ou alguns hacks C # sujos para fazê-la funcionar melhor do que a abordagem padrão, e acho que essa também é parcialmente a minha pergunta, como pessoas hackearam o C # para poder fazer o que os codificadores de jogos fazem naturalmente com o C ++?
Respostas:
OK, apenas para fazer alguns buracos nesse discurso que você vinculou:
O XNA no Xbox 360 é executado em uma versão modificada do .NET Compact Framework CLR. Não tenho dúvidas de que não está de acordo com o padrão da versão para desktop. O JITter provavelmente não é tão bom - mas também não acho que seja ruim . Estou surpreso que ele não tenha mencionado o coletor de lixo, o que é terrível comparado ao CLR da área de trabalho.
(Claro - você não deve bater o coletor de lixo em um jogo desenvolvido profissionalmente de qualquer maneira , assim como você deve ter cuidado com atribuições em qualquer jogo de nível profissional.)
(Para uma discussão técnica real do .NET Compact Framework, talvez comece com esta série de artigos: Visão geral , JIT Compiler e GC e heap .)
A maneira como ele é totalmente inespecífico sobre sua terminologia dificulta o entendimento do que ele quer dizer. Ou ele está no modo de máximo discurso retórico ou não sabe do que está falando.
Agora que nós temos que fora do caminho, aqui estão algumas coisas que você não deixar escapar usando XNA no 360, ao invés de ir nativa :
Também vale ressaltar que essas são apenas restrições do lado da CPU. Você ainda tem acesso totalmente gratuito em execução na GPU.
Descrevi essas coisas nesta resposta para o que é efetivamente a mesma pergunta que essa. Como mencionei nessa resposta, o XNA é absolutamente adequado para o desenvolvimento "profissional" .
As únicas razões que você evitaria é que você não pode contratar talentos em C #, licenciar mecanismos em C # e reutilizar o código C # existente da mesma maneira que pode com a base existente de conhecimento em C ++. Ou porque você também pode ter como alvo uma plataforma que não suporta C #.
Obviamente, para muitos de nós que não somos desenvolvedores "profissionais", o XNA é a nossa única opção de entrar no Xbox 360, fazendo questão de argumentar.
Para responder suas outras perguntas:
Nada no C # impede você de usar abordagens orientadas a dados essencialmente exatamente da mesma maneira que você as usaria no C ++.
O C # carece da capacidade de alinhar automaticamente o código no tempo de compilação e (sem precisar verificar) tenho certeza de que o JITter do CLR compacto não pode incorporar métodos (o CLR da área de trabalho). Portanto, para código crítico de desempenho, talvez seja necessário alinhar manualmente em C #, onde o C ++ fornece assistência.
Provavelmente, uma razão maior pela qual você não vê frequentemente coisas intensivas em matemática da CPU, como detecção de colisão e simulações de fluidos em C #, é a falta de acesso à unidade vetorial (como mencionado acima).
fonte
object
tipo. E na versão 1 (antes dos genéricos), não era possível colocá-los em um contêiner sem matriz sem encaixotá-los. Mas hoje em dia é extremamente fácil escrever código sem caixa. E o CLR Profiler permite detectar qualquer lugar em que você possa estar no boxe.Você teria que definir 'profissional'. Você poderia fazer Angry Birds, Plants vs Zombies, etc? Absolutamente. Você poderia fazer Crysis 2, COD, Halo? Eu duvido. O uso de C # realmente afeta os jogos que exigem muita CPU e também precisam espremer cada último byte de memória (você perde para a coleta de lixo), então ainda há muito o que fazer.
Como uma ferramenta de aprendizado para as pessoas que estão começando, uma ferramenta de prototipagem, uma plataforma para escrever jogos que podem lidar com o trade-off, etc., é fantástica e tem muito poder e simplicidade, apenas não foi projetada para fazer o que você necessariamente chame os jogos 'AAA'. Isso também elimina muita dor e sofrimento que as pessoas precisam se preocupar com a portabilidade e compatibilidade entre plataformas.
Se você criar um jogo incrível e se deparar com as limitações do que pode fazer com o XNA, sugiro entrar em contato diretamente com a MS; se a idéia for realmente boa o suficiente, eles podem permitir que você coloque suas mãos em um desenvolvimento completo kit.
fonte
unsafe
código geralmente é mais lento que o equivalente seguro, porque reduz o número de otimizações que o CLR pode fazer. Você tem que medir.O simples fato é que você não precisa de uma contagem alta de polígonos, iluminação HDR completa ou a física mais interessante do mundo para criar um jogo interessante, e se o seu plano de jogo não incluir nenhum deles, por que não fazer um jogo mais rápido? solução de tempo de desenvolvimento?
Isso está errado. Os jogos profissionais têm o que precisam para implementar sua jogabilidade e obter sua aparência artística, e nada mais e, de fato, nada menos. Um jogo não é mais profissional porque parece mais realista ou tem uma física mais detalhada. Um jogo profissional atinge seus objetivos visuais e de jogabilidade, dentro do prazo, do orçamento, etc., e é enviado e gera lucro.
fonte