Quasi-engine: Desenvolvendo jogos em QML
-
Upload
anderson-briglia -
Category
Technology
-
view
1.719 -
download
1
description
Transcript of Quasi-engine: Desenvolvendo jogos em QML
Quasi-Engine: Desenvolvendo jogosem QML
Índice• Básico do Desenvolvimento de Jogos
• O que é uma Game Engine?
• Estrutura da Quasi-Engine
• Camadas
• Física
• Referências
• Contato + Informações
Básico do Desenvolvimento de Jogos
• Entidades de Jogo• Fases de Atualização/Renderização• Animações
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.
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).
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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
Exemplos de Engines
• AndEngine
• Blender
• CryEngine
• Crystal Space
• GameMaker
• id Tech
• Irrlicht Engine
• SCUMM
• OGRE
• RAGE
• Unity3D
• Unreal Engine
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
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.
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.
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.
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.
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
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.
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.
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.
Parallax Layer
Snippet de exemplo ao lado.
Física
• Bodies• Fixtures• Shapes• Chains• Joints
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.
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.
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.
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.
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.
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.
Referências
• http://www.thegamesjournal.com/articles/WhatIsaGame.shtml
• http://www.richardlord.net/blog/what-is-an-entity-framework
• http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/
• http://en.wikipedia.org/wiki/Asteroids_(video_game)
• http://www.play.vg/games/4-Asteroids.html
• http://en.wikipedia.org/wiki/List_of_game_engines
• http://pt.wikipedia.org/wiki/Corpo_(física)
Contato + Informações
• INdT: http://www.indt.org
• Página da Quasi no github: http://indt.github.com/Quasi-Engine/
• Repositório: http://github.com/INdT/Quasi-Engine