Qual é a diferença entre uma estrutura de jogo e um mecanismo de jogo?

23

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?

Calum Murray
fonte

Respostas:

21

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.

Josh
fonte
11

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.

Patrick Hughes
fonte
1
Na minha empresa, alguém projetou uma estrutura sobre o mecanismo. essa estrutura serve como uma coleção de peças ausentes que o mecanismo não fornece, unifica coisas que, de outra forma, são um pouco desarrumadas em nosso (antigo) mecanismo. E fornece ajudantes para facilitar o desenvolvimento.
precisa saber é
2

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.

maul
fonte
2

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

  1. é um pedaço de código / software
  2. ele deve ser reutilizado em vários projetos (você também pode escrever um mecanismo de jogo para apenas um jogo)
  3. por ser reutilizado, o mecanismo de jogo separa a parte reutilizável da parte específica do jogo
  4. por ser reutilizável (dependendo de como se destina a ser reutilizado), existem diferentes tipos, como um mecanismo controlado por dados que carrega dados externos

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 mecanismo de renderização fazendo a renderização (NOVAMENTE: deus, caramba, inferno: o código que faz apenas renderização NÃO É um mecanismo de jogo)
  • um mecanismo de física fazendo a física (é um mecanismo de física, não um mecanismo de jogo)
  • um mecanismo de IA manipulando as coisas de IA (é um mecanismo de IA e não um mecanismo de jogo)
  • um mecanismo de rede (por exemplo, RakNet) fazendo as coisas de rede (é um mecanismo de rede, não um mecanismo de jogo)
  • um mecanismo de áudio fazendo o material de áudio (é um mecanismo de áudio e não um mecanismo de jogo)

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.

insira a descrição da imagem aqui


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.


monty
fonte
0

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.

PRDeving
fonte