Quasi-engine: Desenvolvendo jogos em QML

1,832 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,832
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
35
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Quasi-engine: Desenvolvendo jogos em QML

  1. 1. Quasi-Engine:Desenvolvendo jogosem QML
  2. 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. 3. Básico do Desenvolvimento deJogos • Entidades de Jogo • Fases de Atualização/Renderização • Animações
  4. 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. 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. 6. Fases deAtualizaçã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. 7. Fases deAtualizaçã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. 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. 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. 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. 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. 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. 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. 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. 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. 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.
  17. 17. Exemplos de Engines • AndEngine • Blender • CryEngine • Crystal Space • GameMaker • id Tech • Irrlicht Engine • SCUMM • OGRE • RAGE • Unity3D • Unreal Engine
  18. 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. 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. 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. 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. 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. 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. 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. 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. 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.
  27. 27. Parallax Layer Snippet de exemplo ao lado.
  28. 28. Física • Bodies • Fixtures • Shapes • Chains • Joints
  29. 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. 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. 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. 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. 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. 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.
  35. 35. 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)
  36. 36. 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 • rodrigo.goncalves@openbossa.org • roger.zanoni@openbossa.org

×