Qual é a diferença entre uma estrutura de jogo (por exemplo, XNA com C #, SDL para c ++) e um mecanismo de jogo?
As estruturas de jogos usam mecanismos? Um motor de jogo encapsula sub-motores como motores de física, motores de partículas etc.? Eles devem ser usados juntos ou são mutuamente exclusivos?
Presumo que existem motores separados para 2D e 3D?
terminology
Calum Murray
fonte
fonte
Respostas:
Realmente não existem definições estritas para "mecanismo" ou "estrutura".
De um modo geral, considera-se que um mecanismo "faz mais" ou tem mais ferramentas e suporte relacionado do que uma estrutura, que por si só costuma ser apenas uma coleção de funcionalidades relacionadas, exposta por meio de uma API unificada.
Para esse fim, coisas que afirmam ser mecanismos podem usar coisas que afirmam ser estruturas para obter funcionalidade, mas nem sempre esse é o caso. Da mesma forma, uma coisa que afirma ser um mecanismo de jogo pode afirmar que suas partes constituintes (a física e a renderização etc.) são implementadas com um mecanismo de física ou uma estrutura de física. Os tipos de tecnologia referidos por ambos os termos podem ser usados de forma intercambiável ou não.
Pode haver "mecanismos" ou "estruturas" para praticamente qualquer coisa - física, som e, sim, até gráficos 2D ou 3D.
É realmente apenas uma questão de terminologia, e geralmente não importa muito. De uma perspectiva de funcionalidade, uma perspectiva focada em criar seu jogo, o que importa é se a tecnologia em questão oferece ou não o que você precisa para criar seu jogo. Se ele se autodenomina um mecanismo ou uma estrutura, não terá qualquer influência sobre isso.
fonte
Definição simples que eu uso: você pode criar um mecanismo em uma estrutura, mas nunca criaria uma estrutura em um mecanismo. Um é o esqueleto que determina a arquitetura e o fluxo do programa, o outro é o músculo que faz o trabalho.
Para um exemplo concreto, o Artemis é uma pequena estrutura pura para a construção de sistemas de componentes, mas você nunca chamaria isso de mecanismo. Você pode criar Artemis Systems e componentes padrão para criar um mecanismo a partir dele.
fonte
Uma estrutura é uma coleção (geralmente) de bibliotecas de nível inferior e material auxiliar que você pode usar para fazer o que quiser (gráficos, sons etc.). Não há nada relacionado a jogos em uma estrutura, exceto que eles geralmente são otimizados ou projetados para fazer coisas comuns em jogos.
Exemplo: um mecanismo permite que você tenha uma lista de entidades, cada uma com uma posição no mapa. Uma estrutura permite renderizar um objeto 3d em uma determinada posição.
Então, você as conecta, dando a cada uma de suas entidades um objeto 3d e as processa quando necessário.
E ta-da, você tem um jogo.
fonte
Para uma explicação muito detalhada, recomendo a leitura da primeira e única Bíblia Game Engine Architecture de Jason Gregory. Eu acho que é o trabalho mais completo sobre esse tópico desde que foi publicado. Ele não lida apenas com a parte C ++, mas também é importante para todos os programadores de mecanismos de jogos que a teoria / arquitetura está por trás. É um bom ponto de partida independente do idioma. Para ter uma visão geral do que estamos falando, é esta imagem do livro
Deixe-me tentar responder à pergunta.
Tudo o que você escrever será código :-) depois de anos de experiência, escreva o que você precisa e como você precisa ou use o que fornece o que você precisa.
Os termos mecanismo e estrutura vêm da arquitetura de software, além de outros termos. Então, vamos começar com os termos básicos e vamos subir.
Biblioteca
Exemplos típicos: uma biblioteca matemática que fornece todos os tipos e funções básicos para cálculos matemáticos (vetor, matriz, ...) ou biblioteca de imagens (jpeg ou png), fornecendo a funcionalidade para gravar imagens jpeg ou png
No Unity 3D Math é uma biblioteca de matemática.
Teoria: uma biblioteca fornece recursos dedicados em torno de um tópico (por exemplo, matemática) E é chamado pelo programador sob demanda .
Uma prévia: pode haver bibliotecas contendo estruturas, também conhecidas como biblioteca de estruturas.
Estrutura
Teoria: Uma estrutura introduz uma inversão de controle . Isso significa que o desenvolvedor na maioria das vezes não chama os métodos da estrutura, mas a estrutura chama o código do desenvolvedor. As exceções são quando você precisa integrar a biblioteca da estrutura no seu código e precisa iniciar a estrutura. Uma biblioteca de estruturas fornece todos os métodos, funções e interfaces para uma estrutura com um uso dedicado. Portanto, as estruturas podem estar em uma biblioteca.
Exemplo típico: O Unity 3D MonoBehaviour fornece métodos como Desperta, Iniciar, OnUpdate. O desenvolvedor implementa esses métodos e, em seguida, esses métodos são chamados pela estrutura (gerenciamento de objetos de jogo) (essa é a inversão de controle) . O mesmo com os métodos OnCollisionEnter, OnCollisionExit. Eles estão no mesmo Monobehaviour, mas eu aposto que eles são chamados pela estrutura física.
Uma visualização: Mecanismo, Tempo de Execução, Editor, SDK
Como o termo mecanismo sempre foi meio vago e ainda é (e não melhora com novos desenvolvimentos tecnológicos), é uma explicação prévia.
O termo mecanismo é usado para várias coisas e não se pode dizer com exclusividade qual é o correto. Em 2004, quando eu tive contato com a criação de mecanismos de jogos, era vago também. Você tinha um mecanismo de jogo no sentido de algum tipo de código que carrega dados predefinidos e permite jogar. Como ele carrega dados predefinidos, eles foram chamados de mecanismos controlados por dados. Você os compila uma vez e os dados externos podem ter sido jogos diferentes sem recompilá-los. Em algum momento, foi o mesmo que um tempo de execução.
O editor é claro. Permite definir os dados predefinidos carregados pelo mecanismo / tempo de execução.
Um mecanismo com um editor foi chamado SDK (por exemplo, Hammer SDK).
Então havia / são motores dedicados. Um mecanismo phyiscs, mecanismo de renderização, mecanismo de som, mecanismo de gerenciamento de objetos de jogo, mecanismo de rede, ....
Na minha opinião pessoal, esses não são mecanismos (especialmente um mecanismo de renderização NÃO É um mecanismo de jogo, pois apenas renderiza). Quando eu google no mecanismo de jogo, os resultados contêm 90% de mecanismos de renderização puros que não são mecanismos de jogo. Eu chamaria todas elas de bibliotecas, mas como elas podem carregar dados predefinidos, elas corresponderiam ao termo mecanismo orientado a dados.
Uma última nota curta antes de entrarmos em detalhes: me formei com sucesso com um mestrado em ciência da computação. Minha tese de mestrado tratou do tópico "como desenvolver o núcleo de um mecanismo de jogo". Significa a parte do código que une todos os outros mecanismos, faz o gerenciamento de objetos do jogo, o loop do jogo, etc.
Publiquei minha tese de mestrado como um livro (curto). O único comentário na Amazon de um comprador / leitor é (após alguns anos): não se trata de um mecanismo de jogo. Desde que me formei com sucesso e, portanto, defendi minha tese contra 3 programadores experientes (2 deles dedicados a jogos e aplicativos interativos), acho que escrevi um mecanismo de jogo.
editor
Fácil: permite definir os dados no formato exigido pelas outras partes e, portanto, elimina a demanda de gravar esses arquivos manualmente ou usar ferramentas externas para criá-los.
É isso que o editor do Unity 3D faz.
Tempo de execução
Esse termo geralmente é usado igualmente com o mecanismo (que pode estar correto ou incorreto).
O tempo de execução executa os dados gerados e faz o que tem a ver com os dados. Por exemplo, mostre o jogo e deixe-o jogar. Ele não cria nenhum dado (exceto, talvez, salvar jogos) no sentido de que você não pode modificar o jogo em si.
O Unity Web Player é / foi um tempo de execução que permite jogar jogos do Unity em um navegador da web.
Você pode carregar e executar vários jogos diferentes com o mesmo tempo de execução.
No caso da API de script do Unity 3D, há um corte entre a funcionalidade que funcionará no jogo e a funcionalidade que funcionará apenas no editor.
SDK
Este termo também é chamado de estrutura .
Naquela época, um SDK era um pacote de ferramentas como um editor, IDE (ambiente de desenvolvedor integrado) para programadores, exportadores de formatos de dados e o tempo de execução / mecanismo.
Portanto, um SDK / framework fornece um fluxo de trabalho e utilitários predefinidos e mostra uma maneira (bem projetada) de como você pode (facilmente) criar um jogo.
Basicamente, o mecanismo Unity 3D estaria errado, pois se encaixaria mais na direção do SDK. Mas como o Unity é ainda mais necessário, é necessária uma nova palavra / definição para corresponder ao que é.
De qualquer forma, para introduzir o outro termo, um SDK / framework fornece a você um pipeline de desenvolvimento de jogos predefinido (não apenas um pipeline de ativos, mas talvez, como o Unity, um pipeline de ativos, lógica, builds, implantações, ...)
Motor
sarcasmo on Usado para tudo, pois todo mundo quer ser legal escrevendo não apenas uma biblioteca, uma estrutura ou um jogo, mas melhor escrevendo um mecanismo completo. sarcasmo
Vamos acioná-lo:
Um motor
Um mecanismo pode consistir em vários outros mecanismos (já que hoje em dia tudo é chamado de mecanismo). Um mecanismo de jogo pode incluir
Um exemplo de aplicativo baseado em um mecanismo principal que fornece uma estrutura baseada em plug-in para reunir tudo em um modelo de gerenciamento de objeto de jogo baseado em componente. Cada sub-mecanismo (renderizando áudio) é um módulo adicionado ao mecanismo de jogo como plug-in. Cada componente pode fazer parte de um sub-mecanismo / módulo. E o gerenciamento de objetos de jogo (baseado em componentes) é o elo de conexão entre os módulos separados.
A definição mais próxima para Game Engine
Um mecanismo de jogo é a parte do código-fonte do seu jogo que fornece todas as funcionalidades que devem ser reutilizadas em vários jogos e permite codificar e executar seu jogo. Portanto, ele reúne todas as outras partes do código (renderização, áudio, física, gerenciamento de objetos de jogos, redes) que são bibliotecas, estruturas ou mecanismos dedicados (renderização, física, ...).
O mecanismo do jogo é a bagunça no meio.
fonte
Como o @Josh já afirmou, não há uma definição estrita de estrutura ou mecanismo, mas, no sentido conceitual, ambas são ferramentas muito diferentes.
Uma estrutura contém uma abastração básica da API para trabalhar, fornecendo ao usuário ferramentas de nível intermediário para interagir com a plataforma ou a funcionalidade sem (geralmente) se preocupar com desempenho, compatibilidade etc. Nos exemplos que você deu, SDL é uma estrutura, fornece você se diverte na plataforma e pode construir seu software por trás dessa camada sem se preocupar com gerenciamento de janelas, itens específicos do sistema operacional etc. Se você deseja criar um software inteiro, precisará de estruturas diferentes, por exemplo SDL para gerenciar a mídia e coisas de plataforma, Box2D para gerenciar física, etc.
Um mecanismo é diferente; nesse caso, a ferramenta envia tudo o que é necessário para o desenvolvimento; um mecanismo de física fornece tudo o que você precisa para gerenciar a física e envia uma API fácil de usar; portanto, se você deseja criar uma simulação de física, não precisará de nenhuma outra biblioteca de terceiros. Os mecanismos não são mais do que uma coleção de estruturas, outros mecanismos, interfaces, trechos e códigos gerais que fornecem tudo o que é necessário para concluir o projeto sem precisar de terceiros ou se preocupar com coisas de nível inferior.
fonte