SlideShare a Scribd company logo
1 of 54
Advanced Topics
for
Game Developers
JÚLIO PESCUITE
COOPERGAMES
JULIO@COOPERGAMES.COM.BR
@JULIOPESCUITE
Agenda
1. Sobre mim
2. Introdução teórica
3. Tópicos nível Básico
4. Tópicos nível Intermediário
5. Tópicos nível Avançado
6. Q/A
7. Fim
Sobre mim
 Graduado em Engenharia de Computação pela Veris Educacional - Metrocamp
 Especialista em Desenvolvimento de Jogos Digitais pela PUC - Paraná
 MBA em Gestão Empreendedora de negócios pela ESAMC - Campinas
 Desenvolvedor de jogos desde 2004 onde atuou em empresas como Overplay,
Vostu e Daitan Games Studio(consultoria)
 Fundador da empresa CooperGames
 Coautor do livro "Design de Jogos: Fundamentos", publicado em 2008 pela
editora Brasport.
Sobre mim
Haro PlayAcqua NinjaPoo
Aviso aos navegantes
 Apenas o caminho das pedras, a ponta do iceberg......
 Assuntos complexos à frente capitão !
Um pouco de teoria
BUSQUEM CONHECIMENTO – ET BILU
Anatomia de um jogo Android
Anatomia de um jogo Android
Controles
•Touch
•Acelerômetro
•Botões
•Rede
Lógica
•Jogo
•Física
•UI
•Rede
Saída
•Tela
•Sensores
•Musica
•Sons
•Rede
Elementos de uma game engine
Core Física Musica/Som
Janelas Ferramentas Renderer
Interface Entrada/Saída Rede
Anatomia de um jogo Android
Carga Entrada Renderização
AtualizaçãoExecuçãoFinalização
Engines e frameworks
para jogos Android
Engines e frameworks
para jogos Android
 Os exemplos de código serão feitos usando por base a AndEngine, pois :
 É uma engine open source
 Grátis
 Código fonte aberto e disponível par olhar/estudar/entender/usar/melhor
 Cheia de exemplos
 Bem suportada pela comunidade e criadores
 Engine intuitiva e classes de fácil uso
 Performática : Suporta OpenGL ES 2
 Bacana ;)
Mão na massa : Básico
PIECE OF CAKE
Don't repeat yourself
 A grande maioria dos jogos(ou mesmo Engines) dispõe de um conjunto de
classes básicas e comuns ao seu desenvolvimento, independente do gênero.
 Tipicamente conhecidas como core game classes
 A classe fundamental é o GameObject , que representa um elemento
qualquer de jogo ( Sprite, Jogador, Inimigo, texto etc.)
 Cada engine/desenvolvedor organiza o GameObject da maneira mais
genérica possível adequada dentro do contexto do projeto do jogo.
Don't repeat yourself
 Outras classes comuns também estão presentes, como por exemplo
Sprite(objetos animados em tela), GuiText( Textos dinâmicos dentro do jogo)
,Background( fundo do jogo, podendo ser animado ou estático).
 Todas as classes restantes do jogo herdam de GameObject.
Don't repeat yourself
Don't repeat yourself
 Ex. GameObject da Unity 3D
Gráficos
 Recomendação quanto ao uso das APIS Gráficas :
 Jogos 2D Simples : Puzzles, Plataformas simples, jogos de uma única tela : Use Canvas
Gráficos
 Recomendação quanto ao uso das APIS Gráficas :
 Jogos 2.5 D, 3D ou com muita atualização em tela : Use Opengl ES nem que seja a
versão 1.0 
Em suma : Sempre que possível,
opte pelo OpenGL ES
Gráficos – Aceleração por Hardware
 A partir da API 11(Android 3.0) a renderização é suportada por hardware
 Todas as operações de desenho em tela são executadas usando a GPU
 Mas......
 Seu jogo IRÁ consumir mais memória ;(
 Aceleração de hardware é habilitada por padrão a partir da API 14 mas deve ser feita explicitamente :
<application android:hardwareAccelerated="true" ...>
Tela cheia neles
 Jogos : Usualmente em tela cheia !
 Código da Activity do game :
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
Tela cheia neles
Mão na massa : Conte o FPS
 Frame rate é a frequência (taxa) em que um dispositivo de imagem produz imagens
únicas e consecutivas únicos chamadas frames
 Frame rate é na maioria das vezes expressa em quadros por segundo (FPS)
 Importante contar para verificar se o jogo não ficou travado em alguma rotina
 AndEngine
this.mEngine.registerUpdateHandler(new FPSLogger());
 E Pronto 
Mão na massa : Conte o FPS
Mão na massa : Desenhe alguns
GameObjects
 Sprites !!
 Passo 1 : Criar e carregar a textura :
this.mTexture = new BitmapTexture(this.getTextureManager(), new IInputStreamOpener() {
@Override
public InputStream open() throws IOException {
return getAssets().open("gfx/face_box.png");
}
});
this.mTexture.load();
Mão na massa : Desenhe alguns
GameObjects
 Passo 2 : Criar e adicionar o Sprite na cena :
 Criar o Sprite :
final Sprite face = new Sprite(
centerX,
centerY,
this.mFaceTextureRegion
, this.getVertexBufferObjectManager());
 Adicionar na cena :
 scene.attachChild(face);
Mão na massa : Desenhe alguns
GameObjects
Mão na massa : Leia as entradas
 TouchListener se estiver fazendo a própria engine (Chuck Norris mode = ON )
 Ou, AndEngine !
 Habilitando o Multi Touch :
engineOptions.getTouchOptions().setNeedsMultiTouch(true);
Mão na massa : Leia as entradas
final Sprite sprite = new Sprite(...) { // Pegando eventos de toque em um Sprite
@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
switch(pSceneTouchEvent.getAction()) {
case TouchEvent.ACTION_DOWN:
// Touch em direção para baixo
break;
case TouchEvent.ACTION_MOVE:
// Toque E movimento
break;
case TouchEvent.ACTION_UP:
// Touch em direção para cima
break;
}
return true;
}
}
Mão na massa : Leia as entradas
Mão na massa : Controles em tela !!!
 Sempre que possível , use controles em tela pois :
 Independem dos controles físicos em hardware
 Fornecem melhor ergonomia de jogo em smartphones
 São mais intuitivos de usar de calibrar por parte dos jogadores
Mão na massa : Controles em tela !!!
Mão na massa : Controles em tela !!!
 A AndEngine já possui uma classe própria para controles em tela :
 AnalogOnScreenControl
Mão na massa : Controles em tela !!!
public AnalogOnScreenControl
(
final float pX,
final float pY,
final Camera pCamera,
final ITextureRegion pControlBaseTextureRegion,
final ITextureRegion pControlKnobTextureRegion,
final float pTimeBetweenUpdates,
final long pOnControlClickMaximumMilliseconds,
final VertexBufferObjectManager pVertexBufferObjectManager,
final IAnalogOnScreenControlListener pAnalogOnScreenControlListener
);
Mão na massa : Controles em tela !!!
new IAnalogOnScreenControlListener() {
@Override
public void onControlChange(final BaseOnScreenControl pBaseOnScreenControl, final float
pValueX, final float pValueY) {
physicsHandler.setVelocity(pValueX * 100, pValueY * 100);
}
@Override
public void onControlClick(final AnalogOnScreenControl pAnalogOnScreenControl) {
face.registerEntityModifier(new SequenceEntityModifier(new ScaleModifier(0.25f, 1, 1.5f),
new ScaleModifier(0.25f, 1.5f, 1)));
}
});
Mão na massa : Controles em tela !!!
Mão na massa :
Intermediário e Avançado
MOTHER OF GOD...
Mão na massa : Desenhe algumas
partículas !
 Partículas : Menor ponto renderizável em uma cena de jogo, mas
com tempo de vida, trajetória e características próprias
 Permitem reproduzir efeitos de fumaça, fogo, jatos de agua, sprays
etc.
Mão na massa : Desenhe algumas
partículas !
 Usando a AndEngine :
this.mBitmapTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(), 32, 32,
TextureOptions.BILINEAR_PREMULTIPLYALPHA);
this.mParticleTextureRegion =
BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlas, this,
"particle_point.png", 0, 0);
Mão na massa : Desenhe algumas partículas !
final CircleOutlineParticleEmitter particleEmitter = new
CircleOutlineParticleEmitter(ParticleSystemSimpleExample.CAMERA_WIDTH * 0.5f,
ParticleSystemSimpleExample.CAMERA_HEIGHT * 0.5f + 20, 80);
final SpriteParticleSystem particleSystem = new SpriteParticleSystem(particleEmitter,
60, 60, 360, this.mParticleTextureRegion, this.getVertexBufferObjectManager());
particleSystem.addParticleInitializer(new ColorParticleInitializer<Sprite>(1, 0, 0));
particleSystem.addParticleInitializer(new AlphaParticleInitializer<Sprite>(0));
particleSystem.addParticleInitializer(new
BlendFunctionParticleInitializer<Sprite>(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE));
particleSystem.addParticleInitializer(new VelocityParticleInitializer<Sprite>(-2, 2, -20,
-10));
particleSystem.addParticleInitializer(new RotationParticleInitializer<Sprite>(0.0f,
360.0f));
particleSystem.addParticleInitializer(new ExpireParticleInitializer<Sprite>(6));
Mão na massa : Desenhe algumas
partículas !
particleSystem.addParticleModifier(new ScaleParticleModifier<Sprite>(0, 5, 1.0f, 2.0f));
particleSystem.addParticleModifier(new ColorParticleModifier<Sprite>(0, 3, 1, 1, 0, 0.5f, 0, 0));
particleSystem.addParticleModifier(new ColorParticleModifier<Sprite>(4, 6, 1, 1, 0.5f, 1, 0, 1));
particleSystem.addParticleModifier(new AlphaParticleModifier<Sprite>(0, 1, 0, 1));
particleSystem.addParticleModifier(new AlphaParticleModifier<Sprite>(5, 6, 1, 0));
scene.attachChild(particleSystem);
Mão na massa : Desenhe algumas
particulas !
Mão na massa : Use Tilemaps !!
 Tilemap : Técnica de otimização de mapeamento de texturas onde é possível se ter uma
única textura, dividida em blocos(“azulejos”) e um ou vários cenários com mapeamentos
diferentes da mesma textura (sistema de matriz).
Mão na massa : Use Tilemaps !!
 TileSet: Conjunto de áreas de textura delimitadas por uma região fixa
Mão na massa : Use Tilemaps !!
 Tilemap : Tileset + Mapeamento usualmente feito com uma ou mais ferramentas por
exemplo,tiled.
Mão na massa : Use Tilemaps !!
 Usando Tilemaps com a AndEngine :
TMXTiledMap mTMXTiledMap;
final TMXLoader tmxLoader = new TMXLoader(this.getAssets(), this.mEngine.getTextureManager(),
TextureOptions.BILINEAR_PREMULTIPLYALPHA, this.getVertexBufferObjectManager(),null);
this.mTMXTiledMap = tmxLoader.loadFromAsset("tmx/desert.tmx");
final TMXLayer = this.mTMXTiledMap.getTMXLayers().get(0);
scene.attachChild(tmxLayer);
Mão na massa : Use Tilemaps !!
Gráficos
 Carregar texturas em arquivos .PNG é legal mas, quando se precisa carregar
muitas imagens, com memória(VRAM) limitada....
 Solução ?
 Usar compressão de texturas :
 PVRTC e PVRTC2 : Algoritmos de compressão de textura(com perda) implementados
na maioria dos chips gráficos dos dispositivos Android(dentre outros)
 Permitem o uso de texturas grandes comprimidas
Gráficos
Gráficos
 Criar a PVRTexture com a AndEngine :
this.mTextureRGB565 = new PVRTexture(this.getTextureManager(), PVRTextureFormat.RGB_565, new
TextureOptions(GLES20.GL_LINEAR, GLES20.GL_LINEAR, GLES20.GL_CLAMP_TO_EDGE,
GLES20.GL_CLAMP_TO_EDGE, false)) {
@Override
protected InputStream onGetInputStream() throws IOException {
return PVRTextureExample.this.getResources().openRawResource(R.raw.house_pvr_rgb_565);
}
};
 Implementar chamadas na mão via Chuck norris mode : Fica para os universitários 
Dicas Finais
 Garbage collector is our friend : Coopere com ele evitando alocações de
novos objetos dentro do game loop
 Somente habilite os sensores(acelerometro) quando realmente precisar para
evitar descarregar a bateria rapidamente.
 O jogo deve respeitar o ciclo de vida de uma Activity : lembre-se de
implementar os metodos de pause; resume, assim os jogadores poderão
restaurar o estado do jogo de onde foi parado.
Obrigado !
Contatos :
 www.coopergames.com.br
 julio@coopergames.com.br
 @juliopescuite
 +55 19 9 8129 25 29

More Related Content

What's hot

User guide lego mindstorms ev3 10 all pt
User guide lego mindstorms ev3 10 all ptUser guide lego mindstorms ev3 10 all pt
User guide lego mindstorms ev3 10 all ptAdriano Cardoso
 
Inicialização do meu pc mais rápida
Inicialização do meu pc mais rápidaInicialização do meu pc mais rápida
Inicialização do meu pc mais rápidaSirene Monturil
 
Manual Nikon D3000 em Português
Manual Nikon D3000 em PortuguêsManual Nikon D3000 em Português
Manual Nikon D3000 em Portuguêslojadafotografia
 
Manual Nikon D3100 em Português
Manual Nikon D3100 em PortuguêsManual Nikon D3100 em Português
Manual Nikon D3100 em Portuguêslojadafotografia
 
Manual da nikon D3100 rm (pt)03
Manual da nikon D3100 rm (pt)03Manual da nikon D3100 rm (pt)03
Manual da nikon D3100 rm (pt)03Alexandre Reis
 
Manual Nikon D7000 em Português
Manual Nikon D7000 em PortuguêsManual Nikon D7000 em Português
Manual Nikon D7000 em Portuguêslojadafotografia
 
Trabalho De T.I.C Tayrone Nº11
Trabalho De T.I.C Tayrone Nº11Trabalho De T.I.C Tayrone Nº11
Trabalho De T.I.C Tayrone Nº11Tayrone Roger
 
Introdução à Programação com Robôs Lego
Introdução à Programação com Robôs LegoIntrodução à Programação com Robôs Lego
Introdução à Programação com Robôs LegoRayner Pires
 
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...INdT
 
Manual Câmera Nikon D7100
Manual Câmera Nikon D7100Manual Câmera Nikon D7100
Manual Câmera Nikon D7100Sérgio Amaral
 
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
 
Tcc - Desenvolvimento de jogos eletrônicos utilizando a tecnologia Unity - Lu...
Tcc - Desenvolvimento de jogos eletrônicos utilizando a tecnologia Unity - Lu...Tcc - Desenvolvimento de jogos eletrônicos utilizando a tecnologia Unity - Lu...
Tcc - Desenvolvimento de jogos eletrônicos utilizando a tecnologia Unity - Lu...Luis Henrique Ferreira
 
NXT Lego Mindstorm - Sensor de Luz
NXT Lego Mindstorm - Sensor de LuzNXT Lego Mindstorm - Sensor de Luz
NXT Lego Mindstorm - Sensor de LuzDJM Projecto
 
Manual do windows 7 acabado
Manual do windows 7   acabadoManual do windows 7   acabado
Manual do windows 7 acabadoNelson Faria
 

What's hot (20)

User guide lego mindstorms ev3 10 all pt
User guide lego mindstorms ev3 10 all ptUser guide lego mindstorms ev3 10 all pt
User guide lego mindstorms ev3 10 all pt
 
Inicialização do meu pc mais rápida
Inicialização do meu pc mais rápidaInicialização do meu pc mais rápida
Inicialização do meu pc mais rápida
 
Manual Nikon D3000 em Português
Manual Nikon D3000 em PortuguêsManual Nikon D3000 em Português
Manual Nikon D3000 em Português
 
Manual Nikon D3100 em Português
Manual Nikon D3100 em PortuguêsManual Nikon D3100 em Português
Manual Nikon D3100 em Português
 
Manual: Basicão do Windows XP
Manual: Basicão do Windows XPManual: Basicão do Windows XP
Manual: Basicão do Windows XP
 
Manual do tablet educacional
Manual do tablet educacionalManual do tablet educacional
Manual do tablet educacional
 
Manual da nikon D3100 rm (pt)03
Manual da nikon D3100 rm (pt)03Manual da nikon D3100 rm (pt)03
Manual da nikon D3100 rm (pt)03
 
Tutorial Muan
Tutorial MuanTutorial Muan
Tutorial Muan
 
Tra windosxp
Tra windosxpTra windosxp
Tra windosxp
 
Ex 7
Ex 7Ex 7
Ex 7
 
Manual Nikon D7000 em Português
Manual Nikon D7000 em PortuguêsManual Nikon D7000 em Português
Manual Nikon D7000 em Português
 
Trabalho De T.I.C Tayrone Nº11
Trabalho De T.I.C Tayrone Nº11Trabalho De T.I.C Tayrone Nº11
Trabalho De T.I.C Tayrone Nº11
 
Introdução à Programação com Robôs Lego
Introdução à Programação com Robôs LegoIntrodução à Programação com Robôs Lego
Introdução à Programação com Robôs Lego
 
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
 
Manual Câmera Nikon D7100
Manual Câmera Nikon D7100Manual Câmera Nikon D7100
Manual Câmera Nikon D7100
 
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
 
Tcc - Desenvolvimento de jogos eletrônicos utilizando a tecnologia Unity - Lu...
Tcc - Desenvolvimento de jogos eletrônicos utilizando a tecnologia Unity - Lu...Tcc - Desenvolvimento de jogos eletrônicos utilizando a tecnologia Unity - Lu...
Tcc - Desenvolvimento de jogos eletrônicos utilizando a tecnologia Unity - Lu...
 
NXT Lego Mindstorm - Sensor de Luz
NXT Lego Mindstorm - Sensor de LuzNXT Lego Mindstorm - Sensor de Luz
NXT Lego Mindstorm - Sensor de Luz
 
Manual do windows 7 acabado
Manual do windows 7   acabadoManual do windows 7   acabado
Manual do windows 7 acabado
 
Windows 2003 server
Windows 2003 serverWindows 2003 server
Windows 2003 server
 

Viewers also liked

Melhorar a performance de times scrum com gamificação colaborativa
Melhorar a performance de times scrum com gamificação colaborativaMelhorar a performance de times scrum com gamificação colaborativa
Melhorar a performance de times scrum com gamificação colaborativaAnderson Diniz Hummel
 
AgileBrazil - Fazendo do Scrum um Game para melhor adoção do framework
AgileBrazil - Fazendo do Scrum um Game para melhor adoção do frameworkAgileBrazil - Fazendo do Scrum um Game para melhor adoção do framework
AgileBrazil - Fazendo do Scrum um Game para melhor adoção do frameworkMarlon Luz
 
Introdução ao desenvolvimento de jogos educativos HTML5 ( MoodleMoot Brasília...
Introdução ao desenvolvimento de jogos educativos HTML5 ( MoodleMoot Brasília...Introdução ao desenvolvimento de jogos educativos HTML5 ( MoodleMoot Brasília...
Introdução ao desenvolvimento de jogos educativos HTML5 ( MoodleMoot Brasília...David Luz
 
Unite 2014 - Usando a Unity em Game Jams
Unite 2014 - Usando a Unity em Game JamsUnite 2014 - Usando a Unity em Game Jams
Unite 2014 - Usando a Unity em Game JamsBruno Campagnolo
 
Visões do Game Design #1
Visões do Game Design #1Visões do Game Design #1
Visões do Game Design #1Rodrigo
 
Gamificação, muito além de pontos e medalhas
Gamificação, muito além de pontos e medalhasGamificação, muito além de pontos e medalhas
Gamificação, muito além de pontos e medalhasCayo Medeiros
 
Palestra Introdução ao Game Design
Palestra Introdução ao Game DesignPalestra Introdução ao Game Design
Palestra Introdução ao Game DesignLeonardo Zamprogno
 

Viewers also liked (14)

Melhorar a performance de times scrum com gamificação colaborativa
Melhorar a performance de times scrum com gamificação colaborativaMelhorar a performance de times scrum com gamificação colaborativa
Melhorar a performance de times scrum com gamificação colaborativa
 
TIPOS DE GAMES
TIPOS DE GAMESTIPOS DE GAMES
TIPOS DE GAMES
 
AgileBrazil - Fazendo do Scrum um Game para melhor adoção do framework
AgileBrazil - Fazendo do Scrum um Game para melhor adoção do frameworkAgileBrazil - Fazendo do Scrum um Game para melhor adoção do framework
AgileBrazil - Fazendo do Scrum um Game para melhor adoção do framework
 
Game Design e Educação
Game Design e EducaçãoGame Design e Educação
Game Design e Educação
 
Introdução ao desenvolvimento de jogos educativos HTML5 ( MoodleMoot Brasília...
Introdução ao desenvolvimento de jogos educativos HTML5 ( MoodleMoot Brasília...Introdução ao desenvolvimento de jogos educativos HTML5 ( MoodleMoot Brasília...
Introdução ao desenvolvimento de jogos educativos HTML5 ( MoodleMoot Brasília...
 
Unite 2014 - Usando a Unity em Game Jams
Unite 2014 - Usando a Unity em Game JamsUnite 2014 - Usando a Unity em Game Jams
Unite 2014 - Usando a Unity em Game Jams
 
Visões do Game Design #1
Visões do Game Design #1Visões do Game Design #1
Visões do Game Design #1
 
Gamificação, muito além de pontos e medalhas
Gamificação, muito além de pontos e medalhasGamificação, muito além de pontos e medalhas
Gamificação, muito além de pontos e medalhas
 
Palestra Introdução ao Game Design
Palestra Introdução ao Game DesignPalestra Introdução ao Game Design
Palestra Introdução ao Game Design
 
Exemplo de GDD
Exemplo de GDDExemplo de GDD
Exemplo de GDD
 
Apostila Redes
Apostila RedesApostila Redes
Apostila Redes
 
Apostila Jogos
Apostila Jogos Apostila Jogos
Apostila Jogos
 
Apostila Photoshop
Apostila Photoshop Apostila Photoshop
Apostila Photoshop
 
Aula Digital de Química - Ácidos e Bases
Aula Digital de Química - Ácidos e BasesAula Digital de Química - Ácidos e Bases
Aula Digital de Química - Ácidos e Bases
 

Similar to Game Dev Topics

Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2Odair Bonin Borges
 
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
 
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
 
Desenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDKDesenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDKBruno Cicanci
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6Flávio Ribeiro
 
Oficina Android - Games com AndEngine - Dia 1
Oficina Android - Games com AndEngine - Dia 1Oficina Android - Games com AndEngine - Dia 1
Oficina Android - Games com AndEngine - Dia 1Odair Bonin Borges
 
Desenvolvimento de jogos para android com andengine
Desenvolvimento de jogos para android com andengineDesenvolvimento de jogos para android com andengine
Desenvolvimento de jogos para android com andengineDiego Lopes
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 3
Implementação de Aplicações Móveis e Jogos com Python - Aula 3Implementação de Aplicações Móveis e Jogos com Python - Aula 3
Implementação de Aplicações Móveis e Jogos com Python - Aula 3Flávio Ribeiro
 
Desenvolvendo games multiplataforma
Desenvolvendo games multiplataformaDesenvolvendo games multiplataforma
Desenvolvendo games multiplataformaAndré Santee
 
Aula 01 - Desenvolvendo Jogos Para Android - Ambiente do Jogo
Aula 01 - Desenvolvendo Jogos Para Android - Ambiente do JogoAula 01 - Desenvolvendo Jogos Para Android - Ambiente do Jogo
Aula 01 - Desenvolvendo Jogos Para Android - Ambiente do JogoArthur Emanuel
 
Programação de jogos eletrônicos
Programação de jogos eletrônicosProgramação de jogos eletrônicos
Programação de jogos eletrônicosguest8ff100
 
Desenvolvendo jogos com PyGame - Rafael Jeffman
Desenvolvendo jogos com PyGame - Rafael JeffmanDesenvolvendo jogos com PyGame - Rafael Jeffman
Desenvolvendo jogos com PyGame - Rafael JeffmanTchelinux
 
Desenvolvendo Jogos com PyGame - Rafael Guterres Jeffman - Tchelinux Pelotas ...
Desenvolvendo Jogos com PyGame - Rafael Guterres Jeffman - Tchelinux Pelotas ...Desenvolvendo Jogos com PyGame - Rafael Guterres Jeffman - Tchelinux Pelotas ...
Desenvolvendo Jogos com PyGame - Rafael Guterres Jeffman - Tchelinux Pelotas ...Tchelinux
 

Similar to Game Dev Topics (20)

Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2
 
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
 
Guia xna
Guia xnaGuia xna
Guia xna
 
Idez
IdezIdez
Idez
 
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
 
Game programming
Game programmingGame programming
Game programming
 
Minicurso pygame
Minicurso pygameMinicurso pygame
Minicurso pygame
 
Desenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDKDesenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDK
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6
 
Game programming
Game programmingGame programming
Game programming
 
Oficina Android - Games com AndEngine - Dia 1
Oficina Android - Games com AndEngine - Dia 1Oficina Android - Games com AndEngine - Dia 1
Oficina Android - Games com AndEngine - Dia 1
 
Desenvolvimento de jogos para android com andengine
Desenvolvimento de jogos para android com andengineDesenvolvimento de jogos para android com andengine
Desenvolvimento de jogos para android com andengine
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 3
Implementação de Aplicações Móveis e Jogos com Python - Aula 3Implementação de Aplicações Móveis e Jogos com Python - Aula 3
Implementação de Aplicações Móveis e Jogos com Python - Aula 3
 
Desenvolvendo games multiplataforma
Desenvolvendo games multiplataformaDesenvolvendo games multiplataforma
Desenvolvendo games multiplataforma
 
Projecto intercalar
Projecto intercalarProjecto intercalar
Projecto intercalar
 
Aula 01 - Desenvolvendo Jogos Para Android - Ambiente do Jogo
Aula 01 - Desenvolvendo Jogos Para Android - Ambiente do JogoAula 01 - Desenvolvendo Jogos Para Android - Ambiente do Jogo
Aula 01 - Desenvolvendo Jogos Para Android - Ambiente do Jogo
 
Curso Unity3D
Curso Unity3DCurso Unity3D
Curso Unity3D
 
Programação de jogos eletrônicos
Programação de jogos eletrônicosProgramação de jogos eletrônicos
Programação de jogos eletrônicos
 
Desenvolvendo jogos com PyGame - Rafael Jeffman
Desenvolvendo jogos com PyGame - Rafael JeffmanDesenvolvendo jogos com PyGame - Rafael Jeffman
Desenvolvendo jogos com PyGame - Rafael Jeffman
 
Desenvolvendo Jogos com PyGame - Rafael Guterres Jeffman - Tchelinux Pelotas ...
Desenvolvendo Jogos com PyGame - Rafael Guterres Jeffman - Tchelinux Pelotas ...Desenvolvendo Jogos com PyGame - Rafael Guterres Jeffman - Tchelinux Pelotas ...
Desenvolvendo Jogos com PyGame - Rafael Guterres Jeffman - Tchelinux Pelotas ...
 

More from iMasters

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroO que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroiMasters
 
Postgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesiMasters
 
Por que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesiMasters
 
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...iMasters
 
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesiMasters
 
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...iMasters
 
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsArquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsiMasters
 
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...iMasters
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudiMasters
 
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 Use MDD e faça as máquinas trabalharem para você - Andreza Leite Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Use MDD e faça as máquinas trabalharem para você - Andreza LeiteiMasters
 
Entendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesEntendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesiMasters
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosiMasters
 
Dicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeDicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeiMasters
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle MonteiroiMasters
 
Quem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujoriMasters
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaiMasters
 
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiErros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiiMasters
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...iMasters
 
Construindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisiMasters
 
Monitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoiMasters
 

More from iMasters (20)

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroO que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
 
Postgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio Telles
 
Por que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen Moraes
 
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
 
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
 
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
 
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsArquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
 
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
 
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 Use MDD e faça as máquinas trabalharem para você - Andreza Leite Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 
Entendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesEntendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita Bernardes
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana Arnos
 
Dicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeDicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato Groffe
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
 
Quem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio Maujor
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
 
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiErros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
 
Construindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina Karklis
 
Monitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe Regalgo
 

Game Dev Topics

  • 1. Advanced Topics for Game Developers JÚLIO PESCUITE COOPERGAMES JULIO@COOPERGAMES.COM.BR @JULIOPESCUITE
  • 2. Agenda 1. Sobre mim 2. Introdução teórica 3. Tópicos nível Básico 4. Tópicos nível Intermediário 5. Tópicos nível Avançado 6. Q/A 7. Fim
  • 3. Sobre mim  Graduado em Engenharia de Computação pela Veris Educacional - Metrocamp  Especialista em Desenvolvimento de Jogos Digitais pela PUC - Paraná  MBA em Gestão Empreendedora de negócios pela ESAMC - Campinas  Desenvolvedor de jogos desde 2004 onde atuou em empresas como Overplay, Vostu e Daitan Games Studio(consultoria)  Fundador da empresa CooperGames  Coautor do livro "Design de Jogos: Fundamentos", publicado em 2008 pela editora Brasport.
  • 5. Aviso aos navegantes  Apenas o caminho das pedras, a ponta do iceberg......  Assuntos complexos à frente capitão !
  • 6. Um pouco de teoria BUSQUEM CONHECIMENTO – ET BILU
  • 7. Anatomia de um jogo Android
  • 8. Anatomia de um jogo Android Controles •Touch •Acelerômetro •Botões •Rede Lógica •Jogo •Física •UI •Rede Saída •Tela •Sensores •Musica •Sons •Rede
  • 9. Elementos de uma game engine Core Física Musica/Som Janelas Ferramentas Renderer Interface Entrada/Saída Rede
  • 10. Anatomia de um jogo Android Carga Entrada Renderização AtualizaçãoExecuçãoFinalização
  • 11. Engines e frameworks para jogos Android
  • 12. Engines e frameworks para jogos Android  Os exemplos de código serão feitos usando por base a AndEngine, pois :  É uma engine open source  Grátis  Código fonte aberto e disponível par olhar/estudar/entender/usar/melhor  Cheia de exemplos  Bem suportada pela comunidade e criadores  Engine intuitiva e classes de fácil uso  Performática : Suporta OpenGL ES 2  Bacana ;)
  • 13. Mão na massa : Básico PIECE OF CAKE
  • 14. Don't repeat yourself  A grande maioria dos jogos(ou mesmo Engines) dispõe de um conjunto de classes básicas e comuns ao seu desenvolvimento, independente do gênero.  Tipicamente conhecidas como core game classes  A classe fundamental é o GameObject , que representa um elemento qualquer de jogo ( Sprite, Jogador, Inimigo, texto etc.)  Cada engine/desenvolvedor organiza o GameObject da maneira mais genérica possível adequada dentro do contexto do projeto do jogo.
  • 15. Don't repeat yourself  Outras classes comuns também estão presentes, como por exemplo Sprite(objetos animados em tela), GuiText( Textos dinâmicos dentro do jogo) ,Background( fundo do jogo, podendo ser animado ou estático).  Todas as classes restantes do jogo herdam de GameObject.
  • 17. Don't repeat yourself  Ex. GameObject da Unity 3D
  • 18. Gráficos  Recomendação quanto ao uso das APIS Gráficas :  Jogos 2D Simples : Puzzles, Plataformas simples, jogos de uma única tela : Use Canvas
  • 19. Gráficos  Recomendação quanto ao uso das APIS Gráficas :  Jogos 2.5 D, 3D ou com muita atualização em tela : Use Opengl ES nem que seja a versão 1.0 
  • 20. Em suma : Sempre que possível, opte pelo OpenGL ES
  • 21. Gráficos – Aceleração por Hardware  A partir da API 11(Android 3.0) a renderização é suportada por hardware  Todas as operações de desenho em tela são executadas usando a GPU  Mas......  Seu jogo IRÁ consumir mais memória ;(  Aceleração de hardware é habilitada por padrão a partir da API 14 mas deve ser feita explicitamente : <application android:hardwareAccelerated="true" ...>
  • 22. Tela cheia neles  Jogos : Usualmente em tela cheia !  Código da Activity do game : requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
  • 24. Mão na massa : Conte o FPS  Frame rate é a frequência (taxa) em que um dispositivo de imagem produz imagens únicas e consecutivas únicos chamadas frames  Frame rate é na maioria das vezes expressa em quadros por segundo (FPS)  Importante contar para verificar se o jogo não ficou travado em alguma rotina  AndEngine this.mEngine.registerUpdateHandler(new FPSLogger());  E Pronto 
  • 25. Mão na massa : Conte o FPS
  • 26. Mão na massa : Desenhe alguns GameObjects  Sprites !!  Passo 1 : Criar e carregar a textura : this.mTexture = new BitmapTexture(this.getTextureManager(), new IInputStreamOpener() { @Override public InputStream open() throws IOException { return getAssets().open("gfx/face_box.png"); } }); this.mTexture.load();
  • 27. Mão na massa : Desenhe alguns GameObjects  Passo 2 : Criar e adicionar o Sprite na cena :  Criar o Sprite : final Sprite face = new Sprite( centerX, centerY, this.mFaceTextureRegion , this.getVertexBufferObjectManager());  Adicionar na cena :  scene.attachChild(face);
  • 28. Mão na massa : Desenhe alguns GameObjects
  • 29. Mão na massa : Leia as entradas  TouchListener se estiver fazendo a própria engine (Chuck Norris mode = ON )  Ou, AndEngine !  Habilitando o Multi Touch : engineOptions.getTouchOptions().setNeedsMultiTouch(true);
  • 30. Mão na massa : Leia as entradas final Sprite sprite = new Sprite(...) { // Pegando eventos de toque em um Sprite @Override public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) { switch(pSceneTouchEvent.getAction()) { case TouchEvent.ACTION_DOWN: // Touch em direção para baixo break; case TouchEvent.ACTION_MOVE: // Toque E movimento break; case TouchEvent.ACTION_UP: // Touch em direção para cima break; } return true; } }
  • 31. Mão na massa : Leia as entradas
  • 32. Mão na massa : Controles em tela !!!  Sempre que possível , use controles em tela pois :  Independem dos controles físicos em hardware  Fornecem melhor ergonomia de jogo em smartphones  São mais intuitivos de usar de calibrar por parte dos jogadores
  • 33. Mão na massa : Controles em tela !!!
  • 34. Mão na massa : Controles em tela !!!  A AndEngine já possui uma classe própria para controles em tela :  AnalogOnScreenControl
  • 35. Mão na massa : Controles em tela !!! public AnalogOnScreenControl ( final float pX, final float pY, final Camera pCamera, final ITextureRegion pControlBaseTextureRegion, final ITextureRegion pControlKnobTextureRegion, final float pTimeBetweenUpdates, final long pOnControlClickMaximumMilliseconds, final VertexBufferObjectManager pVertexBufferObjectManager, final IAnalogOnScreenControlListener pAnalogOnScreenControlListener );
  • 36. Mão na massa : Controles em tela !!! new IAnalogOnScreenControlListener() { @Override public void onControlChange(final BaseOnScreenControl pBaseOnScreenControl, final float pValueX, final float pValueY) { physicsHandler.setVelocity(pValueX * 100, pValueY * 100); } @Override public void onControlClick(final AnalogOnScreenControl pAnalogOnScreenControl) { face.registerEntityModifier(new SequenceEntityModifier(new ScaleModifier(0.25f, 1, 1.5f), new ScaleModifier(0.25f, 1.5f, 1))); } });
  • 37. Mão na massa : Controles em tela !!!
  • 38. Mão na massa : Intermediário e Avançado MOTHER OF GOD...
  • 39. Mão na massa : Desenhe algumas partículas !  Partículas : Menor ponto renderizável em uma cena de jogo, mas com tempo de vida, trajetória e características próprias  Permitem reproduzir efeitos de fumaça, fogo, jatos de agua, sprays etc.
  • 40. Mão na massa : Desenhe algumas partículas !  Usando a AndEngine : this.mBitmapTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(), 32, 32, TextureOptions.BILINEAR_PREMULTIPLYALPHA); this.mParticleTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlas, this, "particle_point.png", 0, 0);
  • 41. Mão na massa : Desenhe algumas partículas ! final CircleOutlineParticleEmitter particleEmitter = new CircleOutlineParticleEmitter(ParticleSystemSimpleExample.CAMERA_WIDTH * 0.5f, ParticleSystemSimpleExample.CAMERA_HEIGHT * 0.5f + 20, 80); final SpriteParticleSystem particleSystem = new SpriteParticleSystem(particleEmitter, 60, 60, 360, this.mParticleTextureRegion, this.getVertexBufferObjectManager()); particleSystem.addParticleInitializer(new ColorParticleInitializer<Sprite>(1, 0, 0)); particleSystem.addParticleInitializer(new AlphaParticleInitializer<Sprite>(0)); particleSystem.addParticleInitializer(new BlendFunctionParticleInitializer<Sprite>(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE)); particleSystem.addParticleInitializer(new VelocityParticleInitializer<Sprite>(-2, 2, -20, -10)); particleSystem.addParticleInitializer(new RotationParticleInitializer<Sprite>(0.0f, 360.0f)); particleSystem.addParticleInitializer(new ExpireParticleInitializer<Sprite>(6));
  • 42. Mão na massa : Desenhe algumas partículas ! particleSystem.addParticleModifier(new ScaleParticleModifier<Sprite>(0, 5, 1.0f, 2.0f)); particleSystem.addParticleModifier(new ColorParticleModifier<Sprite>(0, 3, 1, 1, 0, 0.5f, 0, 0)); particleSystem.addParticleModifier(new ColorParticleModifier<Sprite>(4, 6, 1, 1, 0.5f, 1, 0, 1)); particleSystem.addParticleModifier(new AlphaParticleModifier<Sprite>(0, 1, 0, 1)); particleSystem.addParticleModifier(new AlphaParticleModifier<Sprite>(5, 6, 1, 0)); scene.attachChild(particleSystem);
  • 43. Mão na massa : Desenhe algumas particulas !
  • 44. Mão na massa : Use Tilemaps !!  Tilemap : Técnica de otimização de mapeamento de texturas onde é possível se ter uma única textura, dividida em blocos(“azulejos”) e um ou vários cenários com mapeamentos diferentes da mesma textura (sistema de matriz).
  • 45. Mão na massa : Use Tilemaps !!  TileSet: Conjunto de áreas de textura delimitadas por uma região fixa
  • 46. Mão na massa : Use Tilemaps !!  Tilemap : Tileset + Mapeamento usualmente feito com uma ou mais ferramentas por exemplo,tiled.
  • 47. Mão na massa : Use Tilemaps !!  Usando Tilemaps com a AndEngine : TMXTiledMap mTMXTiledMap; final TMXLoader tmxLoader = new TMXLoader(this.getAssets(), this.mEngine.getTextureManager(), TextureOptions.BILINEAR_PREMULTIPLYALPHA, this.getVertexBufferObjectManager(),null); this.mTMXTiledMap = tmxLoader.loadFromAsset("tmx/desert.tmx"); final TMXLayer = this.mTMXTiledMap.getTMXLayers().get(0); scene.attachChild(tmxLayer);
  • 48. Mão na massa : Use Tilemaps !!
  • 49. Gráficos  Carregar texturas em arquivos .PNG é legal mas, quando se precisa carregar muitas imagens, com memória(VRAM) limitada....  Solução ?  Usar compressão de texturas :  PVRTC e PVRTC2 : Algoritmos de compressão de textura(com perda) implementados na maioria dos chips gráficos dos dispositivos Android(dentre outros)  Permitem o uso de texturas grandes comprimidas
  • 51. Gráficos  Criar a PVRTexture com a AndEngine : this.mTextureRGB565 = new PVRTexture(this.getTextureManager(), PVRTextureFormat.RGB_565, new TextureOptions(GLES20.GL_LINEAR, GLES20.GL_LINEAR, GLES20.GL_CLAMP_TO_EDGE, GLES20.GL_CLAMP_TO_EDGE, false)) { @Override protected InputStream onGetInputStream() throws IOException { return PVRTextureExample.this.getResources().openRawResource(R.raw.house_pvr_rgb_565); } };  Implementar chamadas na mão via Chuck norris mode : Fica para os universitários 
  • 52. Dicas Finais  Garbage collector is our friend : Coopere com ele evitando alocações de novos objetos dentro do game loop  Somente habilite os sensores(acelerometro) quando realmente precisar para evitar descarregar a bateria rapidamente.  O jogo deve respeitar o ciclo de vida de uma Activity : lembre-se de implementar os metodos de pause; resume, assim os jogadores poderão restaurar o estado do jogo de onde foi parado.
  • 53.
  • 54. Obrigado ! Contatos :  www.coopergames.com.br  julio@coopergames.com.br  @juliopescuite  +55 19 9 8129 25 29