Estou curioso para saber por que o C ++ é tão popular no desenvolvimento de jogos, e não em outras linguagens. Eu sei que você pode criar código muito rápido com ele, mas o que exatamente o torna popular?
É só porque é rápido? Existe algum outro recurso na linguagem, como o paradigma OO ou a portabilidade? É por causa de todas as bibliotecas que foram criadas ao longo do tempo? Ou alguma combinação de todas essas (e outras) razões?
Se alguém pudesse me informar sobre isso, eu ficaria muito feliz. :-)
Respostas:
Inúmeras razões:
fonte
Há algumas razões que eu gostaria de mencionar além do que o @Graham trouxe.
fonte
low-level
linguagem; mas umhigh-level
montador, IMO.A velocidade bruta é o principal motivo, mas, na verdade, não é uma decisão de escolha ou não, então muitas empresas de jogos estão começando a usar outros idiomas para partes do jogo. Certas tarefas exigem que o computador funcione o mais rápido possível (por exemplo, rotinas principais de renderização), mas muitas tarefas no código de jogo não precisam ser executadas com tanta rapidez (por exemplo, abrindo a porta quando o jogador clica nele), o que significa que é inteligente usar uma linguagem muito mais simples (e, portanto, mais rápida para escrever programas) para essas partes. É por isso que muitos mecanismos de jogo são escritos em C ++, mas incorporam uma linguagem de script como Lua para escrever código de jogo.
O mais complicado de entender é que, ao escolher as linguagens de programação, existe uma troca geral entre eficiência para o computador e eficiência para o programador. Ou seja, o que é mais importante para você, com que rapidez o computador executa o código ou com que rapidez o programador grava o código?
fonte
No C ++, você pode alocar variáveis locais que desaparecem após o término da função. Geralmente, eles são alocados em uma pilha.
As variáveis de pilha não contribuem para os problemas de alocação de memória dinâmica de fragmentação e sobrecarga. Alocar espaço na pilha é rápido e fácil (apenas ajustando um ponteiro). A alocação dinâmica de memória geralmente envolve procurar em um contêiner um bloco de memória adequado, marcando a memória e marcando-a como ocupada. A desalocação envolve adicionar o bloco de memória a um contêiner e possivelmente mesclá-lo aos blocos existentes. Muito mais sobrecarga do que apenas mudar um ponteiro.
Java e C # alocam memória dinamicamente, exceto para tipos primitivos. Esses idiomas dependem de um ambiente de tempo de execução que marcará uma variável a ser excluída e, em seguida, execute um coletor de lixo em intervalos aleatórios (não programados) para recuperar a memória. Em geral, o programador não tem controle sobre quando a variável será marcada para exclusão nem quando será recuperada (recuperação de memória usada é um tópico avançado que a maioria dos programadores de C ++ e Java não possui).
A velocidade do C ++ deve-se principalmente à sua tradução direta para código executável. Java e C # são compilados para um código intermediário que é então interpretado por uma máquina virtual. Em geral, os idiomas interpretativos têm desempenho mais lento que os idiomas traduzidos diretamente.
fonte
structs
. Mais ao ponto, extremamente extremamente pequeno aumento na velocidade Este redes você não é quase o suficiente para justificar uma língua sobre a outra. O verdadeiro motivo é afirmado pelo @Graham Perks: é o que os desenvolvedores de jogos devem saber, é o que os novos desenvolvedores aprendem e para que novos SDKs são direcionados. Há uma abundância de idiomas (ex. Ir) que são tão ou mais rápido, e não quase tão inconveniente para escrever para.Os jogos foram escritos em linguagem de máquina, porque tinham hardware exótico para o qual não havia compilador. O hardware também não possuía recursos que os programadores C consideram garantidos, como matemática matemática eficiente de 16 bits.
Depois que os jogos se estabeleceram em hardware familiar, os compiladores C ficaram disponíveis e em pouco tempo todos os jogos foram escritos em C.
C ++ parecia uma boa idéia ao mesmo tempo, e a maioria dos jogos é C ++ hoje, mas os engenheiros estão agora resmungando sobre um retorno ao C, e isso pode realmente acontecer. Eu adoraria trabalhar em um jogo em C, assim como muitos colegas de trabalho. Não há nenhum recurso novo no C ++ que eu acho que melhore os jogos.
Parece que agora que os computadores são 1000x mais rápidos do que alguns anos atrás, uma linguagem de alto nível reduziria o tempo de desenvolvimento ($) tornando C obsoleto.
Isso não aconteceu porque os compradores de jogos sabem que o hardware é 1000x melhor e desejam trocar seus dólares por um jogo com aparência e som 1000x melhores. Isso remove a folga do sistema que um idioma de alto nível consumiria.
Os requisitos de desempenho nos jogos são brutais. Um novo quadro de gráficos deve ser renderizado em menos de 33ms (ou 16ms!) Sem falha. Tudo o que o hardware faz deve ser contabilizado, para que esse orçamento possa ser cumprido. Qualquer linguagem que apague e faça algo com o hardware que o programador não entende ou espera, tornará muito difícil cumprir esse orçamento. Este é um sinal de menos automático contra qualquer coisa de alto nível.
Os programadores de jogos não apenas trabalham em uma linguagem de baixo nível, mas também evitam estruturas e algoritmos de dados de alto nível. Os jogos normalmente não têm listas vinculadas e raramente têm árvores. Há um movimento para evitar ponteiros sempre que possível *. Qualquer algoritmo com mais de O (N) tempo ou O (1) espaço tende a não encontrar amplo uso.
* Se um ponteiro não causa falta de cache, por que gastar 32 bits para armazená-lo? Se um ponteiro causar falta de cache, é melhor se livrar dessa falta de cache.
fonte
human
com derivadosplayer
eenemy
?Todas as linguagens de programação têm pontos fortes e fracos em vários fatores. Exemplos desses fatores são:
Um dos fatores mais importantes com os quais um programador de jogos se importa é o desempenho. Eles querem produzir uma experiência interativa, o que significa que deve ser reativo e capaz de gerar o máximo possível de dados úteis (ou interessantes). Você quer saber quanta saúde você tem a qualquer momento e não quer esperar por isso. E se você clicar em um botão, espera que uma arma seja disparada ou que seu personagem pule quando você diz. Um pequeno atraso pode interferir nessa interatividade, portanto você precisa de desempenho.
Outro fator importante é preferir programar no idioma do problema, e não no idioma da implementação. Um programador de jogos quer lidar com humanos, orcs e carros de corrida, não com o registro de memória ED0. Eles ainda querem a opção de mergulhar nos detalhes da implementação, se precisarem de desempenho, mas seria ótimo que, na maior parte do tempo, eles possam lidar com o nível das entidades em seu mundo de jogo. Eles têm o suficiente para se preocupar em simular o mundo do jogo sem precisar se preocupar sempre com o funcionamento de uma lista vinculada.
O C ++ se encaixa muito bem nesses dois fatores principais. Você pode ter os benefícios de desempenho de montagem ou código C com a expressividade de objetos. Para ver por que isso é adequado para jogos, compare com outras opções de idioma:
O último ponto é que parte disso é histórico e político. Muitas guerras de chamas foram travadas entre as diferentes linguagens de programação. O C #, por exemplo, pode ser igualmente adequado ao desenvolvimento de jogos, mas veio depois do C ++. Ou as pessoas não gostam que seja da Microsoft. Algumas pessoas mudaram para C #, outras não. Algumas pessoas ainda programam jogos no BASIC, Pascal e C. Quaisquer que sejam os programadores que se sentirem confortáveis, eles seguirão. Os programadores de jogos geralmente se sentem à vontade com C ++, possivelmente porque cresceram com C e C ++, e isso atendeu às suas necessidades. Se a indústria de computadores estiver em um estado em que o desempenho e a aceitação de Java satisfaçam um número suficiente de pessoas, talvez Java seja a linguagem padrão de desenvolvimento de jogos padrão.
fonte
Legado e impulso.
Era uma vez um código que foi escrito no assembler para o melhor desempenho. À medida que a energia de computação aumentou, as linguagens compiladas se tornaram mais viáveis, e C ofereceu o melhor compromisso entre energia e produtividade, em um nível muito básico, sendo pouco mais que um macro assembler.
C ++ foi apenas o sucessor natural de C. Você não joga fora nenhum código ou conhecimento anterior, mas tem o potencial de se expandir para novas metodologias. O C ++ é, no final das contas, muito flexível, e ainda estou vendo um paradigma de design que não pode ser pelo menos simulado em C ++, enquanto é capaz de manter quase o controle total sobre o desempenho.
fonte
Se você está desenvolvendo para os consoles, não tem escolha: os SDKs profissionais são fornecidos apenas em versões C ++. Geralmente eles também têm acesso C à maioria das coisas.
Como muitos desenvolvedores são Consoles + PC, faz sentido fazer todo o trabalho no PC no mesmo idioma e compartilhar diretamente a tecnologia.
Como é aí que a indústria profissional mora, e a maioria das pessoas quer fazer parte disso, a maioria dos programadores de jogos é C ++.
Como tudo isso acontece, a maioria dos desenvolvedores de mecanismos também é C ++; portanto, ao avaliar mecanismos de nível profissional, quase todas as suas opções serão C ++.
É tudo um grande motor auto-sustentável. A interrupção exigiria mais do que apenas avanço técnico.
fonte
FWIW: C # está ganhando popularidade no desenvolvimento de jogos. Veja o post de Miguel de Icaza . Leitura muito interessante, IMHO.
fonte
Embora eu seja bastante anti-C, C & C ++, a única coisa que eles têm e que poucas outras linguagens têm é o controle completo da plataforma em que está rodando, você pode ter certeza exatamente do que estará acontecendo o tempo todo, não GC, sem falhas.
Hoje em dia, isso não é tão importante, mas pode ser para plataformas com pouca potência.
No PC / Mac / Linux, é provavelmente a linguagem menos portátil que você encontrará hoje em dia, e o bônus de velocidade não faz mais tanta diferença - o Minecraft (Java) é suave e funciona em plataformas mínimas (e em qualquer sistema operacional) com um único executável - ainda não vi um aplicativo C / C ++ de baixa mão de obra com tanta funcionalidade e poucos bugs, quanto mais trabalhar em três plataformas.
Então, neste momento, eu diria que a maior parte é inércia e a concepção de que jogos reais sempre são feitos em C / C ++, embora a capacidade de "portar" para o iPhone e os consoles seja significativa (embora eu tenha certeza de que a maioria da interface do usuário dos jogos exige muito esforço para portar, exceto entre Windows e XBox).
fonte