Programação de jogos: métodos comuns e padrões de design [fechado]


9

Comecei a escrever um mecanismo de jogo muito simples para aprender melhor o OpenGL 3.x, mas como minha inexperiência e meu conhecimento escasso de como um jogo em 3D deve ser projetado, geralmente encontro problemas onde percebo que deveria ter projetado minhas classes diferentemente. Outros problemas que estou enfrentando é como acompanhar o tempo de maneira concisa no jogo e atualizar o movimento conforme necessário e como informar ao representante que ele precisa redesenhar. Também continuo precisando criar funções Get e Set para passar vários sinalizadores de um objeto para outro, isso é uma prática ruim?

Então, como o título diz, estou interessado em livros ou artigos / tutoriais e fontes que possam me ajudar e explicariam alguns padrões comuns de design em design de jogos (por exemplo, manipuladores de estado de jogos, fontes etc.).

Btw, ainda estou usando freeglut, você recomendaria que eu mudasse para um sistema de janelas melhor antes de progredir ou depois de obter uma melhor compreensão do OpenGL?


12
Resposta padrão "Estou escrevendo um mecanismo" = Escrever jogos, não mecanismos. Os motores são uma toca de coelho profunda para cair. Que pesquisa você fez até agora? Aqui você obterá melhores resultados escolhendo um problema único e focado e pesquisando perguntas anteriores. Continue pesquisando novos problemas à medida que eles aparecem enquanto você escreve seu jogo, um de cada vez. Como uma observação lateral, é comum perceber que as classes precisam de um novo design e o processo de fazer isso é chamado de "refatoração", significa que você está aprendendo à medida que avança e isso é uma coisa boa.
Patrick Hughes

11
Obrigado pela sua resposta. Desculpe se eu não estava claro, eu realmente não quero criar um mecanismo de jogo completo, mas gostaria de aprender alguns padrões básicos de design usados ​​no design de jogos, para que eu possa projetar melhor minhas classes. Eu acho que deveria haver algumas soluções comuns para problemas comuns. Quanto mais aprofundar o design, mais problemas surgem e mais difícil é encontrar respostas. Minha pesquisa até agora não foi muito proveitosa, um bom tutorial que eu descobri que se aprofunda nos aspectos de um jogo é codeproject.com/Articles/27219/… .
Grieverheart

11
Entendo, colocar "métodos comuns de mecanismo de jogo" no cabeçalho tende a direcionar a discussão para ... mecanismos =) De qualquer forma, a razão pela qual você está tendo dificuldade em conseguir o que procura é que existem tantos tipos diferentes de jogos, pois há anos em um calendário maia e cada tipo tem suas próprias necessidades. Você pode obter melhores resultados se procurar um tipo específico de jogo, o jogo de tiro em primeira pessoa é muito comum, para dar alguma tração aos mecanismos de busca.
Patrick Hughes

Um estilo FPS ou roaming gratuito seria o que eu estou procurando. Em essência, eu gostaria de criar um mundo onde eu possa experimentar várias técnicas gráficas e de animação. Eu já tenho uma câmera e movimento básicos, como pular, esticar e carregar o modelo, mas não parece certo. Por exemplo, coloquei a animação ambulante dentro da classe de câmera e uso uma variável interna para contar quadros. Estou principalmente corrigindo os buracos e não estou produzindo nada robusto. Eu acho que isso faz parte do processo de aprendizado e talvez eu esteja tentando avançar rápido demais.
Grieverheart

3
codificação, arquitetura completa motor de jogo jogo são dois livros sobre jogos de codificação, você vai ter uma visão geral do pipeline de desenvolvimento e a tecnologia subjacente, eles tocam em um pouco de tudo
dreta

Respostas:


11

Escreverei uma resposta adequada desde que estive no seu estágio há cerca de 2 meses.

Comecei a escrever um mecanismo de jogo muito simples para aprender melhor o OpenGL 3.x, mas como minha inexperiência e meu conhecimento escasso de como um jogo em 3D deve ser projetado, geralmente encontro problemas onde percebo que deveria ter projetado minhas classes diferentemente.

Não se preocupe com isso. Com sua falta de experiência, você nunca será capaz de pensar em todas as possibilidades e maneiras pelas quais uma determinada classe será usada em seu mecanismo. É melhor se você considerar os principais recursos da classe, implementá-lo e reestruturar posteriormente. Não tente pensar demais, você estará perdendo seu tempo nesta fase. Meu primeiro jogo foi uma bagunça completa, tenho certeza que foi o caso da maioria das pessoas.

Outros problemas que estou enfrentando é como acompanhar o tempo de maneira concisa no jogo e atualizar o movimento conforme necessário e como informar ao representante que ele precisa redesenhar.

O que você precisa é o conhecimento sobre o que é um ciclo de jogo. Este é um bom lugar para começar. Depois de começar a escrever códigos mais complexos, como lidar com a física, convém considerar loops com tempos de quadro variáveis, mas comece pequeno. Um loop de jogo de quadro fixo simples deve bastar para você por enquanto.

Também continuo precisando criar funções Get e Set para passar vários sinalizadores de um objeto para outro, isso é uma prática ruim?

Esta é mais uma questão de engenharia de software. Com o tempo, você verá quais dados você precisa proteger e quais são seguros. Provavelmente, é melhor se você apenas implementar um recurso e depois ver o que não está exposto fora dele e puder ser tratado como dados públicos.

É tudo uma questão de experiência. Você escreverá uma classe de câmera e verá a funcionalidade que deseja dela ao lado das matrizes de transformação. Se você quiser alguma dica imediata, eu diria, implemente os ossos, estenda mais tarde.

Artigos e Livros:

  • Desenvolvimento de mecanismo de jogo

Esses livros falam sobre a arquitetura dos mecanismos e pipelines de jogos modernos. Eles fornecerão uma boa visão geral da tecnologia subjacente. Eu recomendo o primeiro livro, se você tiver que escolher, ele é menos "tendencioso" em relação a determinadas tecnologias, embora no final você deseje superar as duas, pois elas são ótimas fontes de conhecimento.

http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135

http://www.amazon.com/Game-Coding-Complete-Third-Edition/dp/1584506806

  • OpenGL

http://ogldev.atspace.co.uk/index.html

http://www.arcsynthesis.org/gltut/index.html

http://www.opengl.org/sdk/docs/man3/

  • GLSL

http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/glsl-core-tutorial-index/

http://www.opengl.org/sdk/docs/manglsl/

  • Detecção de colisão

http://www.peroxide.dk/papers/collision/collision.pdf

(Estou vinculando isso porque achei difícil encontrar artigos sobre como a detecção adequada de colisão 3D é feita.)

Há mais livros, mas quando você terminar isso (especialmente a Game Engine Architecture), você saberá melhor o que deseja.

Btw, ainda estou usando freeglut, você recomendaria que eu mudasse para um sistema de janelas melhor antes de progredir ou depois de obter uma melhor compreensão do OpenGL?

WinAPI, se você sentir que tem tempo e vontade de aprender a programação do Windows (se estiver desenvolvendo para o Windows). O FreeGLUT é bom para aprender, mas eventualmente você precisará de mais funcionalidades. No entanto, se você quiser seguir outra rota, poderá iniciar o OpenGL com bibliotecas como SFML ou SDL. Fique com o FreeGLUT, a menos que você seja teimoso como eu. Fui direto para o WinAPI.


Hey dreta, muito obrigado pela sua resposta muito agradável. Eu estava esperando por isso: P! Felizmente, eu já sei como fazer a detecção de colisões, pois já implementei alguns algoritmos para simulações de física :).
Grieverheart 17/05

@ user1294203 impressionante, eu estava perdido quando se inicia, então só postou isso no caso
dreta

Eu voto na SFML, se você não quiser mexer muito com o código específico da plataforma. É pequeno, fácil, limpo e você pode mergulhar facilmente no código para entender como ele envolve o WINAPI, por exemplo.
Edin-m
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.