Quasi-engine: Desenvolvendo jogos em QML

36
Quasi-Engine: Desenvolvendo jogos em QML

description

 

Transcript of Quasi-engine: Desenvolvendo jogos em QML

Page 1: Quasi-engine: Desenvolvendo jogos em QML

Quasi-Engine: Desenvolvendo jogosem QML

Page 2: Quasi-engine: Desenvolvendo jogos em 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

Page 3: Quasi-engine: Desenvolvendo jogos em QML

Básico do Desenvolvimento de Jogos

• Entidades de Jogo• Fases de Atualização/Renderização• Animações

Page 4: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 5: Quasi-engine: Desenvolvendo jogos em QML

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).

Page 6: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 7: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 8: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 9: Quasi-engine: Desenvolvendo jogos em QML

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

Page 10: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 11: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 12: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 13: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 14: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 15: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 16: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 17: Quasi-engine: Desenvolvendo jogos em QML

Exemplos de Engines

• AndEngine

• Blender

• CryEngine

• Crystal Space

• GameMaker

• id Tech

• Irrlicht Engine

• SCUMM

• OGRE

• RAGE

• Unity3D

• Unreal Engine

Page 18: Quasi-engine: Desenvolvendo jogos em QML

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

Page 19: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 20: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 21: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 22: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 23: Quasi-engine: Desenvolvendo jogos em QML

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

Page 24: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 25: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 26: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 27: Quasi-engine: Desenvolvendo jogos em QML

Parallax Layer

Snippet de exemplo ao lado.

Page 28: Quasi-engine: Desenvolvendo jogos em QML

Física

• Bodies• Fixtures• Shapes• Chains• Joints

Page 29: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 30: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 31: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 32: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 33: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 34: Quasi-engine: Desenvolvendo jogos em QML

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.

Page 35: Quasi-engine: Desenvolvendo jogos em QML

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)

Page 36: Quasi-engine: Desenvolvendo jogos em QML

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

[email protected][email protected]