Quais são os fundamentos do desenvolvimento de jogos? [fechadas]


12

Eu não entendo completamente como um videogame pode ser codificado.

Sou programador iniciante e só tenho experiência em escrever aplicativos de console que fazem matemática e o que não. Não entendo como esses processos lógicos podem fazer com que as imagens se movam na tela (videogames). Obviamente, se eu pulasse em um livro de desenvolvimento de jogos ou algo assim, eu entenderia, mas atualmente ainda estou tendo uma noção dos fundamentos da programação em geral. Alguém poderia dar uma explicação simples, em termos de codificação, sobre o salto entre fazer um computador fazer matemática simples e fazê-lo produzir programas gráficos incríveis, como videogames? Talvez haja alguns vídeos introdutórios que alguém possa me apontar?

Respostas:


14

Supondo que você seja um iniciante em programação, e para basear meu exemplo em algo que você talvez conheça, enquanto escreve um aplicativo de console que possui um menu onde você deseja que o usuário escolha entre a opção disponível, o que você fará primeiro?

Se você pensou em criar seu menu, conseguiu um argumento, mas e se o usuário pressionar uma tecla que não faz parte da opção disponível,

  1. seu aplicativo será encerrado ou
  2. deve continuar até o usuário pressionar a tecla "Sair"?

Minha aposta seria # 2, o aplicativo continuará até que o usuário pressione expressamente a tecla para sair do aplicativo do console.

Um jogo é de alguma forma parecido! Quando você quer que o jogo saia? Quando o usuário escolhe, certo? Portanto, a ação ou o menu do jogo deve durar até que o usuário deseje sair. Então, você terá que criar um loop que diga ao programa para continuar até que essa mesma tecla para sair seja pressionada.

Você acabou de ser apresentado ao Game Loop. Um jogo é apenas outro programa que é executado até ser expressamente encerrado pelo usuário.

Enquanto estiver jogando, as jogadas são imagens desenhadas na tela em coordenadas específicas. Quando o usuário / jogador pressiona uma tecla direcional como [Left], em seguida, você faz com que sua imagem atualize suas coordenadas enquanto diminui sua coordenada X para dar a impressão de um movimento na direção esquerda. Você precisa obter essas informações para obter a ação que o jogador deseja que seu personagem / nave faça a seguir. Em seguida, o Game Loop continua em loop até que você possa obter outra ação desejada do jogador, até que o jogo seja encerrado.

Bem, receio que essa resposta comece a ser bastante longa, então permita-me apontar outras duas perguntas que possam ser do seu interesse, espero.

  1. Por onde começar a escrever jogos, tutoriais ou algo parecido?
  2. Movendo meu sprite no XNA usando classes .

Esse terceiro link não é sobre como começar a escrever jogos, mas sobre como fazer um sprite se mover na tela. Como você também perguntou sobre como fazer os gráficos se moverem na tela, achei que isso poderia lhe interessar.

Eu espero que isso ajude! =)


4

Enquanto você cria aplicativos de console, provavelmente usa funções chamadas print () ou read () ou write (). Em vez disso, os jogos gráficos usam outras funções que podem ser tão baixas quanto set_pixel () para definir a cor de um pixel individual na tela, para estruturas inteiras que permitem desenhar modelos tridimensionais com muitos efeitos.

Mas a idéia principal é a mesma que para um aplicativo simples de console matemático. Você recebe a entrada do usuário, age de acordo com ela para modificar algumas variáveis ​​e, em seguida, imprime (ou desenha) alguma saída. Jogos e outros programas interativos realizam 30, 60 ou mais desses ciclos de entrada-cálculo-saída, que acontecem a cada segundo. Obviamente, cada parte pode ser tão complexa quanto você deseja, mas geralmente tudo se resume a entrada-cálculo-saída. Então não se preocupe, você está no caminho certo.

Quanto às recomendações, eu diria que você continua programando o máximo que pode. Se você está interessado em se concentrar na programação de jogos e conhece apenas a programação de console, tente fazer uma pequena aventura baseada em texto ou RPG. Dessa forma, você praticará muito sobre como gerenciar suas variáveis, usar números aleatórios e organizar seu código.

Depois de ter alguma experiência com isso, vá ao básico de uma biblioteca de gráficos. Se você estiver fazendo programação procedural, eu recomendaria o OpenGL, enquanto se estiver fazendo programação orientada a objetos, eu recomendaria o XNA.

No entanto, não tome muitas coisas ao mesmo tempo. É muito fácil ficar desapontado ao aprender uma ferramenta complicada, enquanto você aprende a gerenciar uma árvore de fontes, enquanto aprende a iterar em uma matriz, enquanto aprende a obter entrada e som o tempo todo. você está criando seu jogo.

Há um longo caminho pela frente, mas lembre-se de que a diversão é realmente caminhar por ela.

Mantenha o bom trabalho!


4

Um jogo de computador é um loop infinito de:

  • Atualização: Avance o estado do jogo em uma pequena fatia de tempo (como 1/80 segundo).
  • Pinte o estado atual do jogo.

Existem variações disso. Alguns jogos têm mais atualizações entre cada pintura ou podem variar para tornar o jogo igualmente suave em máquinas diferentes. Mas isso são detalhes técnicos.

A fase de atualização que ocorre entre 50 e 100 vezes por segundo (sim, é frequente) faz o seguinte:

  • Atualize a física dos jogos. Digamos que um ator tenha velocidade. A atualização deve movê-lo um pouquinho na direção certa. Além disso, se você usa um mecanismo de física, ele deve verificar colisões com outros atos ou obstáculos.
  • Atualize as regras dos jogos. É isso que o torna um jogo e não um experimento de física. Diga que uma bala atingiu o ator. As regras do jogo dizem ao jogador para deduzir X pontos de vida e a bala para desaparecer.
  • Atualizações de IA. Às vezes, os atores controlados por computador devem decidir o que fazer. Vá para a esquerda ou direita? Encontre um caminho para um bom lugar para se estar. Dispare uma arma.
  • Controle de entrada. Atualize o ator do jogador de acordo com os botões pressionados no teclado.
  • Atualizar gráfico de cena. Isso pode avançar uma animação em uma etapa ou atualizar a GUI para mostrar que o jogador agora tem 10 pontos a menos de vida. O único objetivo é fazer com que o jogo pareça e se sinta agradável.

Por onde você começa?

O requisito básico para um jogo gráfico é programar gráficos. Certifique-se de abrir uma janela e desenhar uma bola nela.

Presumo que você possa fazer algum tipo de aula. Faça uma aula de bola. Possui os seguintes membros: x, y, deltaX, deltaY. Todos são números inteiros e em escala de pixels. Agora, escreva este loop.

forever, do this {
  start measure time (in milliseconds)
  //physics part
  add deltaX to x
  add deltaY to y
  if x is bigger than the screen width, assign -deltaX to deltaX
  if y is bigger than the screen height, assign -deltaY to deltaY
  if x is less than 0, assign -deltaX to deltaX
  if y is less than 0, assign -deltaY to deltaY

  //paint
  paint the ball at x, y
  stop measuring time, assign this to workTime
  make the thread sleep for (25 - workTime) milliseconds
}

Isso fará com que a bola salte dos limites das janelas. Ainda não é um jogo , é uma simulação física. Se você escrever a atualização física das bolas dentro da classe de bolas, é fácil adicionar várias bolas. Armazene-os em uma lista, atualize e pinte cada um deles para cada quadro.

Você pode adicionar uma raquete (simular a física e torná-la controlável com o mouse ou o teclado) e um objetivo do jogo, como impedir que a bola atinja a parede esquerda. Se o jogo adicionar mais e mais bolas ao longo do tempo, a dificuldade aumentará. Você tem um jogo.

Por que dormir por (25 horas) - milissegundos? Se você fizer assim, a simulação será executada em um ritmo constante de 40 atualizações e pinturas por segundo. Será bastante suave. Se você pular a parte de suspensão, a animação será instável e ocupará 100% da CPU. Além disso, a velocidade da bola dependeria da velocidade da máquina que a executava. Agora, a velocidade vertical da bola é de 40 * deltaY pixels por segundo.


2

Pegue o seu programa de console que faz matemática e, quando você der uma resposta correta, faça alguns confetes ... Tornou-se um jogo (alguém além de mim joga Math Blaster quando criança? :)).

Quanto à forma como os computadores são criados para criar ambientes de jogos, às vezes pode ser um pouco complicado, mas tudo se resume a uma aplicação do entendimento humano do mundo ao seu redor. Os jogos usam a mesma matemática, física e ciências para se definir à medida que aplicamos ao mundo ao nosso redor para explicar como ele funciona.

Os jogos Sim são um bom exemplo de real para virtual. Há muito tempo, li uma entrevista com o cara por trás dos jogos Sim e quase todos, sem exceção, nasceram da leitura de um tópico que tentava explicar o mundo ao nosso redor, depois usaram fórmulas matemáticas e colocaram em um ambiente virtual para representá-lo. O SimCity, por exemplo, surgiu da tentativa de simular o básico das economias.

Quanto às especificidades de como você cria um ambiente de jogo em 3D, coloca física, adiciona um pouco de áudio, deixa o usuário começar a interagir com ele. Bem, é para isso que este site e muitos outros estão aqui, e seria impossível resumir em uma resposta mais específica.

No final do dia, descrevo os videogames como bancos de dados de conjuntos de dados limitados muito rápidos. Eles são altamente focados em dados relacionais e acesso a dados de alta velocidade. Quero dizer, se você estiver renderizando um quadro a cada 60 segundos, processará quantidades potencialmente grandes de dados muito rapidamente, com base na relação de onde o jogador está no jogo para todos os outros dados rastreados pelo jogo :)


Muitas gargalhadas, "os videogames como bancos de dados de conjuntos de dados limitados muito rápidos" provavelmente estão apenas aumentando a confusão.
22411 michael.bartnett em

1

O que você precisa entender é matrizes. Eles sustentam os jogos. Depois de entender o poder das matrizes, você verá como os jogos se reduzem à matemática simples.

Você assume uma posição de vértice no espaço do jogo. Você o projeta usando uma matriz na tela (encontre as coordenadas da tela). Você interpola alguns pixels entre ele e os vértices vizinhos e pronto. Obviamente, isso é uma simplificação extremamente grande, mas os fundamentos da rasterização não são de todo complexos quando você cria matrizes.

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.