Mobile Conf
Desenvolvimento de jogos | Android A trajetória de criação criação de um game game
Anderson Leite Leite - MobileConf MobileConf 2013 - São Paulo Paulo
1
Mobile Conf
Sobre mim Ande Anders rson on Leit Leite e Trabalho Trabalho em uma agência digital chamada R/GA, sou desenvolvedor web e gosto de coisas como Ruby, Ruby, Rails, Frontend, Android e design.
Entre em contato! Twitter @anderson_leite Twitter @anderson_leite Web andersonleite.com.br Web andersonleite.com.br
Anderson Leite Leite - MobileConf MobileConf 2013 - São Paulo Paulo
2
Mobile Conf
Sobre mim Ande Anders rson on Leit Leite e Trabalho Trabalho em uma agência digital chamada R/GA, sou desenvolvedor web e gosto de coisas como Ruby, Ruby, Rails, Frontend, Android e design.
Entre em contato! Twitter @anderson_leite Twitter @anderson_leite Web andersonleite.com.br Web andersonleite.com.br
Anderson Leite Leite - MobileConf MobileConf 2013 - São Paulo Paulo
2
Mobile Conf
Anderson Leite Leite - MobileConf MobileConf 2013 - São Paulo Paulo
3
Mobile Conf
Market Share
Anderson Leite Leite - MobileConf MobileConf 2013 - São Paulo Paulo
4
Mobile Conf
Uso do smartphone
Anderson Leite Leite - MobileConf MobileConf 2013 - São Paulo Paulo
5
Mobile Conf
Uso do smartphone
Anderson Leite - MobileConf 2013 - São Paulo
5
Mobile Conf
Uso do smartphone
Anderson Leite - MobileConf 2013 - São Paulo
5
Mobile Conf
Uso do smartphone
Anderson Leite - MobileConf 2013 - São Paulo
5
Mobile Conf
Uso do smartphone
Anderson Leite - MobileConf 2013 - São Paulo
5
Mobile Conf
Uso do smartphone
Anderson Leite - MobileConf 2013 - São Paulo
5
Mobile Conf
“Smartphones trazem novos modelos pra pensar”
Anderson Leite - MobileConf 2013 - São Paulo
6
Mobile Conf
Video games River Ride Atari River Raid e um jogo do tipo scrolling shooter videogame e foi criado em 1982 pela Activision para o Atari 2600. O jogador controla uma nave de baixo para cima que sobrevoa um rio e ganha pontos por atirar em naves inimigas, helicópteros, e balões.
Fabricante Atari Data 1982
Anderson Leite - MobileConf 2013 - São Paulo
7
Mobile Conf
“Desenvolver um jogo é uma das formas mais divertidas de programar”
Anderson Leite - MobileConf 2013 - São Paulo
8
Mobile Conf
1 Protótipo Anderson Leite - MobileConf 2013 - São Paulo
9
Mobile Conf
“Prototype it First! Valide suas ideias e tenha uma visão geral do que vem pela frente”
Anderson Leite - MobileConf 2013 - São Paulo
10
Mobile Conf
Protótipo do jogo Funcionalidades Um player que será representado por uma circunferência verde, posteriormente, a nave
Mover o player de acordo com o toque na tela Um inimigo que será representado por uma circunferência que aumentará com o passar do tempo.
Um placar que será atualizado de acordo com o tempo Game Over quando o inimigo encostar no player Restart e exit como opções
Anderson Leite - MobileConf 2013 - São Paulo
11
Mobile Conf
Game Loop public class Impossible extends SurfaceView implements Runnable { public Impossible(Context context) { super(context); } @Override
public void run() { while(running) { System.out.println("LÓGICA DO JOGO"); } } }
Anderson Leite - MobileConf 2013 - São Paulo
12
Mobile Conf
Android Activity public class Game extends Activity { Impossible view; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Lógica do jogo view = new Impossible(this); // Configura view setContentView(view); } }
Anderson Leite - MobileConf 2013 - São Paulo
13
Mobile Conf
Player private void drawPlayer(Canvas canvas) { paint.setColor(Color.GREEN); canvas .drawCircle(100, 100, 100, paint); }
Anderson Leite - MobileConf 2013 - São Paulo
14
Mobile Conf
Movendo o player public class Game extends Activity implements OnTouchListener { protected void onCreate(Bundle savedInstanceState) { // Touch Listener view.setOnTouchListener(this); } @Override
public boolean onTouch(View v, MotionEvent event) { view.moveDown(10); return true; } }
Anderson Leite - MobileConf 2013 - São Paulo
15
Mobile Conf
Flickering \
Anderson Leite - MobileConf 2013 - São Paulo
16
Mobile Conf
Player private void drawEnemy(Canvas canvas) { paint.setColor(Color.GRAY); enemyRadius++;
canvas.drawCircle(100, 100, enemyRadius, paint); }
Anderson Leite - MobileConf 2013 - São Paulo
17
Mobile Conf
Detectando colisões private void checkCollision(Canvas canvas) { // calcula a hipotenusa distance = Math.pow(playerY - enemyY, 2) + Math.pow(playerX - enemyX, 2); distance = Math.sqrt(distance);
// verifica distancia entre os raios if (distance <= playerRadius + enemyRadius) { gameover = true; }
}
Anderson Leite - MobileConf 2013 - São Paulo
18
Mobile Conf
Protótipo do jogo Conceitos Game Loop rodando várias vezes por segundo Desenhar objetos na tela Detectar colisões entre objetos Atualizar placar e efeitos quando colisão for detectada
Anderson Leite - MobileConf 2013 - São Paulo
19
Mobile Conf
“Desenvolver jogos, essa porra é foda para caraleo, mas é divertida!”
Anderson Leite - MobileConf 2013 - São Paulo
20
Mobile Conf
2 História Anderson Leite - MobileConf 2013 - São Paulo
21
Mobile Conf
14 bis 14 bis O 14-bis era constituído por um aeroplano unido ao balão 14, que fora utilizado em vôos feitos por Santos Dumont em meados de 1906.
Anderson Leite - MobileConf 2013 - São Paulo
22
Mobile Conf
14 bis VS 100 meteoros Tela de abertura
Anderson Leite - MobileConf 2013 - São Paulo
Tela de jogo
23
Mobile Conf
3 Jogo com Cocos2D Anderson Leite - MobileConf 2013 - São Paulo
24
Mobile Conf
Anderson Leite - MobileConf 2013 - São Paulo
25
Mobile Conf
Usar um framework? Não se preocupar com a posição exata em pixels dos objetos Utilizar comportamentos já implementados para Sprites Eliminar da lógica a questão da limpeza de tela Conseguir efeitos interessantes já implementados pelo Cocos2D Sons e efeitos de formamais fácil
Anderson Leite - MobileConf 2013 - São Paulo
26
Mobile Conf
Cocos2D CCScene Cenas do jogo CCLayer Camadas do jogo CCSprite Imagens do jogo Schedule | Unschedule Agendamento de game loop CCScaleBy | CCFadeOut Efeitos e Animações SoundEngine Sons e Música
Anderson Leite - MobileConf 2013 - São Paulo
27
Mobile Conf
Camadas | CCLayer public class TitleScreen extends CCLayer { public CCScene scene() { CCScene scene = CCScene.node(); scene.addChild(this); return scene; } }
Anderson Leite - MobileConf 2013 - São Paulo
28
Mobile Conf
Imagens | CCSprite public class ScreenBackground extends CCSprite { public ScreenBackground(String image) { super(image); } }
public TitleScreen() { CCSprite title = CCSprite.sprite(Assets.logo); title.setPosition(CGPoint.ccp( screenWidth() /2 , screenHeight() - 130 ))); this.addChild(title); }
Anderson Leite - MobileConf 2013 - São Paulo
29
Mobile Conf
Transição | CCDirector public class GameScene extends CCLayer { public static CCScene createGame() { CCScene scene = CCScene.node(); GameScene layer = new GameScene(); scene.addChild(layer); return scene; } }
CCDirector.sharedDirector().replaceScene( CCFadeTransition.transition( 1.0f,
Anderson Leite - MobileConf 2013 - São Paulo
GameScene.createGame() ) );
30
Mobile Conf
Imagens | CCSprite public class Meteor extends CCSprite{ public Meteor(String image) { super(image); x = new Random().nextInt(Math.round(screenWidth())); y = screenHeight(); this.schedule("update"); }
public void update(float dt) { y -= 1; this.setPosition(screenResolution( x, y )); } }
Anderson Leite - MobileConf 2013 - São Paulo
31
Mobile Conf
Engines e Delegates public class MeteorsEngine extends CCLayer { private MeteorsEngineDelegate delegate; public MeteorsEngine() { this.schedule("meteorsEngine", 1.0f / 10f); }
public void meteorsEngine(float dt) { if(new Random().nextInt(30) == 0){ this.getDelegate().createMeteor( new Meteor(Assets.meteor).generate(), 1,1); } }
public void setDelegate(MeteorsEngineDelegate delegate) { this.delegate = delegate; }} Anderson Leite - MobileConf 2013 - São Paulo
32
Mobile Conf
“Utilize ENGINES para fazer a ponte entre um objeto do jogo e a tela principal”
Anderson Leite - MobileConf 2013 - São Paulo
33
Mobile Conf
Detectando Colisões public CGRect getBoarders(CCSprite object){
CGRect rect = object. getBoundingBox();
CGPoint GLpoint = rect.origin; CGRect GLrect = CGRect.make(GLpoint.x, GLpoint.y, rect.size.width, rect.size.height);
return GLrect; }
Anderson Leite - MobileConf 2013 - São Paulo
34
Mobile Conf
Detectando Colisões // Meteoros e tiros hitTest = this.checkRadiusHitsOfArray (this.meteorsArray, this.shootsArray, false, this, " meteoroHit ");
// Avião e meteoros hitTest = this.checkRadiusHitsOfArray (this.meteorsArray, this.playersArray, false, this, " playerHit");
Anderson Leite - MobileConf 2013 - São Paulo
35
Mobile Conf
Detectando Colisões // Check Hit! if (CGRect.intersects(rect1, rect2)) {
System.out.println("Colision Detected: " + hit);
method = GameScene.class. getMethod(hit, CCSprite.class, CCSprite.class);
method. invoke (gameScene, array1.get(i), array2.get(j)); }
Anderson Leite - MobileConf 2013 - São Paulo
36
Mobile Conf
Efeitos e Animações // Remove from Game Array this.delegate. removeMeteor (this); // Stop Shoot this.unschedule("update"); // Pop Actions float dt = 0.2f;
CCScaleBy a1 = CCScaleBy.action(dt, 0.5f); CCFadeOut a2 = CCFadeOut.action(dt); CCSpawn s1 = CCSpawn.actions(a1, a2); // Call RemoveMe CCCallFunc c1 = CCCallFunc.action(this, "removeMe"); // Run actions! this.runAction(CCSequence.actions(s1, c1));
Anderson Leite - MobileConf 2013 - São Paulo
37
Mobile Conf
Sons e música // Música SoundEngine.sharedEngine(). playSound( CCDirector.sharedDirector().getActivity(), R.raw.music);
// Efeitos de Som SoundEngine.sharedEngine(). playEffect ( CCDirector.sharedDirector().getActivity(), R.raw.bang);
Anderson Leite - MobileConf 2013 - São Paulo
38
Mobile Conf
“Faça sempre o cache de efeitos de sons no seu jogo”
Anderson Leite - MobileConf 2013 - São Paulo
39
Mobile Conf
Cache de Sons // Cache SoundEngine.sharedEngine(). preloadEffect ( CCDirector.sharedDirector().getActivity(), R.raw.bang);
Anderson Leite - MobileConf 2013 - São Paulo
40
Mobile Conf
Cocos2D CCScene Cenas do jogo CCLayer Camadas do jogo CCSprite Imagens do jogo Schedule | Unschedule Agendamento de game loop CCScaleBy | CCFadeOut Efeitos e Animações SoundEngine Sons e Música
Anderson Leite - MobileConf 2013 - São Paulo
41
Mobile Conf
Anderson Leite - MobileConf 2013 - São Paulo
42
Mobile Conf
Livro!
Anderson Leite - MobileConf 2013 - São Paulo
43
Mobile Conf
Meu livro! Desenvolvimento de Jogos para Android Explore sua imaginação com o framework Cocos2D Construa um jogo do início ao fim, sem esquecer a importância do enredo, distribuição, arte e como prender a atenção do jogador. Lógica, matemática e física são apresentados sem traumas. Também conheceremos muitos dos benefícios do framework Cocos2D, utilizado na versão definitiva do nosso game.
casadocodigo.com.br Desconto de 10% CUPON: MOBILECONF
Anderson Leite - MobileConf 2013 - São Paulo
44