SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
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

Mais conteúdo relacionado

Destaque

Utilizando o recurso de camera dos smartphones da Nokia usando qt
Utilizando o recurso de camera dos smartphones da Nokia usando qtUtilizando o recurso de camera dos smartphones da Nokia usando qt
Utilizando o recurso de camera dos smartphones da Nokia usando qtAnderson Briglia
 
Qt tchelinux-2010
Qt tchelinux-2010Qt tchelinux-2010
Qt tchelinux-2010Wagner Reck
 
Google app engine para lean startups: the good, the bad and the ugly
Google app engine para lean startups: the good, the bad and the uglyGoogle app engine para lean startups: the good, the bad and the ugly
Google app engine para lean startups: the good, the bad and the uglyPET Computação
 
Cloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineCloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineFrederico Maia Arantes
 
produção de games com tecnologia livre ou proprietária, Qual usar?
produção de games com tecnologia livre ou proprietária, Qual usar?produção de games com tecnologia livre ou proprietária, Qual usar?
produção de games com tecnologia livre ou proprietária, Qual usar?Renan Nespolo
 
Presentation SEO/SEM
Presentation SEO/SEMPresentation SEO/SEM
Presentation SEO/SEMHicham SBINI
 
Introducción al desarrollo de videojuegos 2D con Wave Engine
Introducción al desarrollo de videojuegos 2D con Wave EngineIntroducción al desarrollo de videojuegos 2D con Wave Engine
Introducción al desarrollo de videojuegos 2D con Wave EngineEduard Tomàs
 
Mehr Wert für Gesellschaft und Unternehmen - Ratgeber für wirkungsvolle Unter...
Mehr Wert für Gesellschaft und Unternehmen - Ratgeber für wirkungsvolle Unter...Mehr Wert für Gesellschaft und Unternehmen - Ratgeber für wirkungsvolle Unter...
Mehr Wert für Gesellschaft und Unternehmen - Ratgeber für wirkungsvolle Unter...PHINEO gemeinnützige AG
 
Adforallprsentation 100914100808 Phpapp02
Adforallprsentation 100914100808 Phpapp02Adforallprsentation 100914100808 Phpapp02
Adforallprsentation 100914100808 Phpapp02fabrice_TALAZAC
 
Congreso visión 2012 - taller introducción app engine
Congreso visión 2012 - taller introducción app engineCongreso visión 2012 - taller introducción app engine
Congreso visión 2012 - taller introducción app engineNigeŗ Arce
 
Maklerkommunikation 2.0 – Vortrag auf der DKM 2012 in Dortmund
Maklerkommunikation 2.0 – Vortrag auf der DKM 2012 in DortmundMaklerkommunikation 2.0 – Vortrag auf der DKM 2012 in Dortmund
Maklerkommunikation 2.0 – Vortrag auf der DKM 2012 in DortmundCybay New Media
 
TDD com Python e App Engine
TDD com Python e App EngineTDD com Python e App Engine
TDD com Python e App EngineRicardo Bánffy
 
коллекция Audi в миниатюре
коллекция Audi в миниатюреколлекция Audi в миниатюре
коллекция Audi в миниатюреVag-Express
 

Destaque (20)

Utilizando o recurso de camera dos smartphones da Nokia usando qt
Utilizando o recurso de camera dos smartphones da Nokia usando qtUtilizando o recurso de camera dos smartphones da Nokia usando qt
Utilizando o recurso de camera dos smartphones da Nokia usando qt
 
Qt tchelinux-2010
Qt tchelinux-2010Qt tchelinux-2010
Qt tchelinux-2010
 
QtQuick
QtQuickQtQuick
QtQuick
 
Introdução ao QML
Introdução ao QMLIntrodução ao QML
Introdução ao QML
 
Ogre Game Engine
Ogre Game EngineOgre Game Engine
Ogre Game Engine
 
Google app engine para lean startups: the good, the bad and the ugly
Google app engine para lean startups: the good, the bad and the uglyGoogle app engine para lean startups: the good, the bad and the ugly
Google app engine para lean startups: the good, the bad and the ugly
 
Cloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineCloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App Engine
 
eind presentatie
eind presentatieeind presentatie
eind presentatie
 
produção de games com tecnologia livre ou proprietária, Qual usar?
produção de games com tecnologia livre ou proprietária, Qual usar?produção de games com tecnologia livre ou proprietária, Qual usar?
produção de games com tecnologia livre ou proprietária, Qual usar?
 
Aula de Risoto
Aula de Risoto Aula de Risoto
Aula de Risoto
 
Presentation SEO/SEM
Presentation SEO/SEMPresentation SEO/SEM
Presentation SEO/SEM
 
Communicating sustainibility
Communicating sustainibilityCommunicating sustainibility
Communicating sustainibility
 
20100506 JAX BPMN 2.0 in der Praxis
20100506 JAX BPMN 2.0 in der Praxis20100506 JAX BPMN 2.0 in der Praxis
20100506 JAX BPMN 2.0 in der Praxis
 
Introducción al desarrollo de videojuegos 2D con Wave Engine
Introducción al desarrollo de videojuegos 2D con Wave EngineIntroducción al desarrollo de videojuegos 2D con Wave Engine
Introducción al desarrollo de videojuegos 2D con Wave Engine
 
Mehr Wert für Gesellschaft und Unternehmen - Ratgeber für wirkungsvolle Unter...
Mehr Wert für Gesellschaft und Unternehmen - Ratgeber für wirkungsvolle Unter...Mehr Wert für Gesellschaft und Unternehmen - Ratgeber für wirkungsvolle Unter...
Mehr Wert für Gesellschaft und Unternehmen - Ratgeber für wirkungsvolle Unter...
 
Adforallprsentation 100914100808 Phpapp02
Adforallprsentation 100914100808 Phpapp02Adforallprsentation 100914100808 Phpapp02
Adforallprsentation 100914100808 Phpapp02
 
Congreso visión 2012 - taller introducción app engine
Congreso visión 2012 - taller introducción app engineCongreso visión 2012 - taller introducción app engine
Congreso visión 2012 - taller introducción app engine
 
Maklerkommunikation 2.0 – Vortrag auf der DKM 2012 in Dortmund
Maklerkommunikation 2.0 – Vortrag auf der DKM 2012 in DortmundMaklerkommunikation 2.0 – Vortrag auf der DKM 2012 in Dortmund
Maklerkommunikation 2.0 – Vortrag auf der DKM 2012 in Dortmund
 
TDD com Python e App Engine
TDD com Python e App EngineTDD com Python e App Engine
TDD com Python e App Engine
 
коллекция Audi в миниатюре
коллекция Audi в миниатюреколлекция Audi в миниатюре
коллекция Audi в миниатюре
 

Semelhante a Desenvolvendo jogos em QML com a Quasi-Engine

Júlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game DevelopersJúlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game DevelopersiMasters
 
Oficina Android - Games com AndEngine - Dia 3
Oficina Android - Games com AndEngine - Dia 3Oficina Android - Games com AndEngine - Dia 3
Oficina Android - Games com AndEngine - Dia 3Odair Bonin Borges
 
Palestra Introdução ao Game Design
Palestra Introdução ao Game DesignPalestra Introdução ao Game Design
Palestra Introdução ao Game DesignLeonardo Zamprogno
 
Inteligência artificial algumas técnicas aplicadas em jogos
Inteligência artificial  algumas técnicas aplicadas em jogosInteligência artificial  algumas técnicas aplicadas em jogos
Inteligência artificial algumas técnicas aplicadas em jogosCRISLANIO MACEDO
 
Um Workflow robusto para trabalhar com UI na Unity
Um Workflow robusto para trabalhar com UI na UnityUm Workflow robusto para trabalhar com UI na Unity
Um Workflow robusto para trabalhar com UI na UnityBruno Ferreira
 
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - MackenzieIntrodução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenziejonathanblacknight
 
Criando jogos digitais em java
Criando jogos digitais em javaCriando jogos digitais em java
Criando jogos digitais em javaMichel Montenegro
 
Aulas de análise
Aulas de análiseAulas de análise
Aulas de análiseFrank Lira
 
Aulas de análise
Aulas de análiseAulas de análise
Aulas de análiseFrank Lira
 
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5Willian Molinari
 
Desafios técnicos no mercado mobile
Desafios técnicos no mercado mobileDesafios técnicos no mercado mobile
Desafios técnicos no mercado mobileBruno Ferreira
 
Entendendo o Modelo de Atores
Entendendo o Modelo de AtoresEntendendo o Modelo de Atores
Entendendo o Modelo de AtoresPaulo Siqueira
 
Apresentacao minicursofinal
Apresentacao minicursofinalApresentacao minicursofinal
Apresentacao minicursofinalAlmerindo Rehem
 

Semelhante a Desenvolvendo jogos em QML com a Quasi-Engine (20)

Curso Unity3D
Curso Unity3DCurso Unity3D
Curso Unity3D
 
Game programming
Game programmingGame programming
Game programming
 
Game programming
Game programmingGame programming
Game programming
 
Unity3d
Unity3dUnity3d
Unity3d
 
Júlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game DevelopersJúlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game Developers
 
Oficina Android - Games com AndEngine - Dia 3
Oficina Android - Games com AndEngine - Dia 3Oficina Android - Games com AndEngine - Dia 3
Oficina Android - Games com AndEngine - Dia 3
 
Palestra Introdução ao Game Design
Palestra Introdução ao Game DesignPalestra Introdução ao Game Design
Palestra Introdução ao Game Design
 
Inteligência artificial algumas técnicas aplicadas em jogos
Inteligência artificial  algumas técnicas aplicadas em jogosInteligência artificial  algumas técnicas aplicadas em jogos
Inteligência artificial algumas técnicas aplicadas em jogos
 
Um Workflow Robusto de UI
Um Workflow Robusto de UIUm Workflow Robusto de UI
Um Workflow Robusto de UI
 
Um Workflow robusto para trabalhar com UI na Unity
Um Workflow robusto para trabalhar com UI na UnityUm Workflow robusto para trabalhar com UI na Unity
Um Workflow robusto para trabalhar com UI na Unity
 
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - MackenzieIntrodução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
 
Criando jogos digitais em java
Criando jogos digitais em javaCriando jogos digitais em java
Criando jogos digitais em java
 
Introdução ao desenvolvimento de jogos com unity3d
Introdução ao desenvolvimento de jogos com unity3dIntrodução ao desenvolvimento de jogos com unity3d
Introdução ao desenvolvimento de jogos com unity3d
 
Aulas de análise
Aulas de análiseAulas de análise
Aulas de análise
 
Aulas de análise
Aulas de análiseAulas de análise
Aulas de análise
 
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
 
Desafios técnicos no mercado mobile
Desafios técnicos no mercado mobileDesafios técnicos no mercado mobile
Desafios técnicos no mercado mobile
 
Entendendo o Modelo de Atores
Entendendo o Modelo de AtoresEntendendo o Modelo de Atores
Entendendo o Modelo de Atores
 
Guia xna
Guia xnaGuia xna
Guia xna
 
Apresentacao minicursofinal
Apresentacao minicursofinalApresentacao minicursofinal
Apresentacao minicursofinal
 

Desenvolvendo jogos em QML com a Quasi-Engine

  • 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.
  • 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 Snippet de 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