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

 • rodrigo.goncalves@openbossa.org
 • roger.zanoni@openbossa.org

Quasi-engine: Desenvolvendo jogos em QML

  • 1.
  • 2.
    Índice • Básicodo Desenvolvimento de Jogos • O que é uma Game Engine? • Estrutura da Quasi-Engine • Camadas • Física • Referências • Contato + Informações
  • 3.
    Básico do Desenvolvimentode 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 Emjogos 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.
  • 17.
    Exemplos de Engines • AndEngine • Blender • CryEngine • Crystal Space • GameMaker • id Tech • Irrlicht Engine • SCUMM • OGRE • RAGE • Unity3D • Unreal Engine
  • 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.
  • 27.
    Parallax Layer Snippetde exemplo ao lado.
  • 28.
    Física • Bodies • Fixtures • Shapes • Chains • Joints
  • 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.
  • 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.
    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