2. Índice
• Básico do Desenvolvimento de Jogos
• O que é uma Game Engine?
• Estrutura da Quasi-Engine
• Camadas
• Física
• Referências
• Contato + Informações
3. Básico do Desenvolvimento de
Jogos
• Entidades de Jogo
• Fases de Atualização/Renderização
• Animações
4. Entidades de Jogos
Para entender o que é uma entidade, precisamos ter a ideia
clara do que é um jogo. Nas referências podemos encontrar um
pouco sobre a história do termo, mas, para efeitos práticos, um
jogo pode ser definido por uma interação entre partes, que
possui um conjunto de componentes, regras e objetivos.
Uma entidade é um componente, que deve ser representado e
manipulado durante o jogo.
Não existe uma forma padrão de se representar uma entidade,
mas ela deve conter as informações necessárias para que seja
manipulada durante o jogo.
5. Entidades de Jogos
Como por exemplo, jogo
Asteroids do Atari,
podemos separar as
entidades em: Asteróides,
Projéteis, Nave(Jogador),
Nave(inimiga)
E como informações
necessárias para o jogo:
Posição, Rotação(nave do
jogador) , Direção do
movimento (Asteróides,
naves, projéteis).
6. Fases de
Atualização/Renderização
Somente com as entidades não podemos criar um jogo
interativo. Elas precisam ser manipuladas e apresentadas ao
jogador de alguma maneira.
A fase de atualização é onde acontecem as manipulações de
estado das entidades, onde se atualizam posição, direção,
rotação e quaisquer outras informações possuídas pelas
entidades.
A fase de renderização é onde o jogo usa as informações de
estado das entidades para “desenhar” o resultado na tela.
7. Fases de
Atualização/Renderização
A forma de se implementar
essas fases varia de acordo
com linguagem de
programação/bibliotecas e até
SO utilizados, mas a forma
mais conhecida é através do
game loop, como no código ao
lado.
Esse procedimento é
executado várias vezes por
segundo para que seja criada a
ilusão de movimento.
8. Animações
Em jogos 2D podemos utilizar os seguintes recursos para
criar animações:
●
Transformações geométricas: Alterações de posição,
Tamanho, Rotação.
●
Deformações: Variações das transformações
geométricas para alterar o modo como uma entidade é
renderizada, como aumentar o número de pontos de
uma reta e renderizar os pontos em posições diferentes
para criar uma curva.
●
Sobreposição de imagens: Renderizar uma imagem por
vez de uma sequencia de imagens com um intervalo de
tempo determinado para criar a ilusão de movimento.
9. O que é uma Game Engine?
É a criação de uma interface que provê acesso a rotinas
comumente utilizadas em jogos e abstrai detalhes depentes de
plataforma, como por exemplo:
●
Renderização
●
Física
●
Entrada
●
Interface gráfica
●
Inteligência artificial
●
Som
●
Rede
●
Exemplos de Engines
10. Renderização
Através do processo de renderização, a game engine
desenha na tela a posição, forma e detalhes das
entidades disponíveis no jogo, e que estejam dentro da
área de visão do jogador. Nesta fase também pode-se
utilizar de efeitos gráficos tanto na cena inteira como
nas entidades individuais.
11. Física
A engine de física de um jogo é o módulo
responsável por gerar uma simulação aproximada de
um sistema de física, sendo tais simulações projetadas
em tempo real. Esse sistema de física geralmente
controla a detecção de colisões ocorridas durante o
jogo.
12. Entrada
Responsável por captar as ações de um jogador e
transformá-las em ações de um personagem no jogo.
Esta entrada pode ser feita por mouse ou teclado, mas
é comum que a existência de outros métodos, como a
captação da movimentação do jogador, por exemplo.
13. Interface gráfica
Age como intermediador entre o jogador e o jogo
propriamente dito, geralmente provendo uma interface
de menus para a execução de determinadas tarefas,
acesso a menus e afins.
14. Inteligência artificial
Trata da simulação de comportamentos específicos
das entidades de um jogo, como por exemplo
movimentação, cálculo de caminhos, estratégias de
ataque e defesa, entre outros.
15. Som
Provê controle de emissão de efeitos sonoros e
músicas durante o jogo. Tais efeitos podem ser
controle de echo, pan, volume, distorção, etc.
16. Rede
Módulo responsável do controle de múltiplos
jogadores, geralmente encontrado em partidas online
ou mesmo dentro de uma rede local. O acesso à rede
também pode ser feito para buscar atualizações e
submeter estatísticas do jogador.
18. Estrutura da Quasi-Engine
A Quasi-Engine foi modelada para dividir o jogo em cenas
como uma peça de teatro, onde cada cena possui seus
elementos que interagem entre si. Possui os elementos
básicos para representar o jogo, as cenas e seus elementos.
●
Elemento “Game”
●
Elemento “Entity”
●
Cenas
●
Viewport
●
Camadas
●
Física
19. Elemento “Game”
Representa um jogo
completo, tem a função de
realizar a transição entre as
cenas e “avisar” a cena
atual de que seus
elementos devem ser
atualizados.
20. Elemento “Entity”
É a entidade básica da Quasi-Engine. Possui todas as
propriedades básicas de um item QML (posição,
rotação, visibilidade, opacidade, etc) e pode conter
outros elementos entity ou qualquer elemento QML.
Na Quasi-Engine todos os elementos que podem ser
utilizados em qml descendem do elemento entity e
cada um possui uma rotina (updateScript) que é
chamada sempre que uma atualização é necessária.
21. Cenas
Uma cena é uma subdivisão
lógica de um jogo e cada uma
contém um grupo de elementos
Entity. Por exemplo, cada level de
um jogo pode ser uma cena e
também cada uma das telas de
configuração.
Quando o jogo solicita à cena
que seus elementos sejam
atualizados, a rotina de
atualiazação é chamada para cada
um deles separadamente.
22. Viewport
É uma área retangular onde é projetada a parte de
uma cena.
A parte da cena que é exibida pode variar, criando a
impressão de movimento e variando-se a escala da
área projetada se tem a impressão de aproximação.
23. Camadas
Uma camada na Quasi-Engine é uma área que
contém os itens do cenário que devem ser exibidos em
uma cena. As camadas possuem uma ordem de
apresentação que determina quais elementos de
cenário sobrepõem dos demais. Existem alguns tipos
diferentes de camadas que serão explicados a seguir.
●
Static Layer
●
Animated Layer
●
Parallax Layer
24. Static Layer
Exibe uma ou mais
camadas com imagens
estáticas. É um tipo de
camada bastante útil na
criação de jogos do tipo
plataforma, desejando
assim que os elementos da
cena contenham níveis
diferentes de
apresentação.
25. Animated Layer
Contém as mesmas
propriedades da Static
Layer (controle de níveis,
etc) e a propriedade de
exibir a movimentação das
imagens das camadas
indefinidamente, para a
criação de automatic side-
scrolling games, muito
comuns em celulares com
touch screen sem teclado
físico.
26. Parallax Layer
Parallax é a diferença aparente
do posicionamento de objetos de
acordo com a movimentação da
posição do observador.
Como no exemplo ao lado, os
objetos mais distantes se
movimentam mais lentamente
que os mais próximos, simulando
a movimentação do observador e
dando a impressão de
profundidade da cena.
29. Bodies
Na física um corpo é um conjunto de massas e as
propriedades do corpo, como posição, rotação, etc.
Na biblioteca Box2D, um Body é um elemento que
representa um corpo, possuindo informações como
conjunto de massas(Shapes + Fixtures, explicados a
seguir), posição, ângulo atual e provê interface para
aplicações de força e rotação.
30. Fixtures
Associam um body a um shape e contém
informações úteis para a simulação, como densidade,
coeficiente de fricção e restituição.
31. Shapes
São formas geométricas
atreladas a um corpo,
respondem à colisões e são
utilizados para cálculo da
massa do elemento body.
32. Chains
Na Box2D, o elemento chain é um shape usado para
definir segmentos de reta ligados que podem ou não
formar um polígono e são úteis para, por exemplo,
criar a representação do relevo do ambiente em uma
cena.
Na Quasi-Game simplificamos o uso desses
elementos os unindo em um só elemento chamado
QuasiBody.
33. Joints
Na Box2D joints são, literalmente juntas, que unem
os elementos e mudam seu comportamento na
simulação.
Existem vários tipos de joints na Box2D, mas
atualmente somente as juntas de distância e de mouse
são suportadas.
34. Joints
• QuasiDistanceJoint
É uma junta que une 2 corpos, em pontos
determinados e mantém fixa essa distância entre
eles.
• QuasiMouseJoint
É uma junta que faz uma ligação entre um body e
um ponto que está sempre na mesma posiçao que
o mouse, fazendo que o body ligado tente sempre
seguir a posição atual do cursor.