SlideShare uma empresa Scribd logo
1 de 36
Games - V1


{

    Dia 3
Fase 1 : elementos principais



                              TrueType Font
                                              LINE

                     Sprite Modifier
                     MoveModifier
     Sprite         RotationModifier
                     JumpModifier



                 Physics Box2D
     TouchArea

    SCENE
Mudança nos planos ... (pra melhor !)
                             TrueType Font
                                             LINE

                    Sprite Modifier
                    MoveModifier
    Sprite         RotationModifier
                    JumpModifier



                Physics Box2D
    TouchArea

   SCENE
Textura é a imagem na memória
Região define um retângulo para a
                                    gráfica. No Android, a largura e
 Textura. É usado para o sistema
                                    altura deve ser em potência de 2
       conhecer os Sprites.
                                              (32, 64, 128 ...)
... MainActivity extends SimpleBaseGameActivity {

        private int LARGURA = 800;
        private int ALTURA = 480;
        private Scene cena = null;
        private ITextureRegion regiaoBackground = null; private Font fonte =
null;
        private Text txPontuacao = null;
        private int placar = 0;
        private ITextureRegion regiaoMosca = null;


        private ITextureRegion controle;
        private ITextureRegion botaoMeioControle;

        private Camera camera;
Remova o Camera da
            frente
@Override
public EngineOptions onCreateEngineOptions(){

    camera = new Camera(0, 0, LARGURA, ALTURA);

  EngineOptions opcoes = new EngineOptions(true,
ScreenOrientation.LANDSCAPE_FIXED,
         new RatioResolutionPolicy(LARGURA, ALTURA),
     camera);

    opcoes.getAudioOptions().setNeedsSound(true);

    opcoes.setWakeLockOptions(WakeLockOptions.SCREEN_ON);

    return opcoes;
}
onCreateResources()

BitmapTextureAtlas texturaBitmap = new BitmapTextureAtlas(getTextureManager(),64,64);

texturaBitmap.load(); //astalavista, baby

regiaoMosca = BitmapTextureAtlasTextureRegionFactory.createFromAsset(
      texturaBitmap,
      this,
     "gfx/mosca.png",
     0, 0
);




                                                                                        Mosca
BitmapTextureAtlas texturaControle = new BitmapTextureAtlas(
    getTextureManager(), 256, 128);

controle = BitmapTextureAtlasTextureRegionFactory.createFromAsset(
  texturaControle, this, "gfx/onscreen_control_base.png", 0, 0);


botaoMeioControle = BitmapTextureAtlasTextureRegionFactory.createFromAsset(
   texturaControle, this, "gfx/onscreen_control_knob.png", 128, 0);

texturaControle.load();
onCreateScene()
linha.setColor(Color.YELLOW);
linha.setLineWidth(12);
cena.attachChild(linha);


final Sprite mosca = new Sprite(120, 120,
     regiaoMosca, getVertexBufferObjectManager());

cena.attachChild(mosca);



final PhysicsHandler physicsHandler = new PhysicsHandler(mosca);

mosca.registerUpdateHandler(physicsHandler);
onCreateScene()

final float x = 0;
final float y = ALTURA - controle.getHeight();


final AnalogOnScreenControl controleNaTela = new
AnalogOnScreenControl(

x, y, camera, controle, botaoMeioControle,
                                                 Listener do controle
0.1f, //tempo para os updates

getVertexBufferObjectManager(), null);
onCreateScene()




getVertexBufferObjectManager() ,


new IAnalogOnScreenControlListener() {} );


         add unimplemented methods
@Override
public void onControlChange( BaseOnScreenControl
pBaseOnScreenControl, float pValueX, float pValueY) {

//para voar com a mosca
physicsHandler.setVelocity(pValueX * 100, pValueY * 100);

//para girar com a mosca
mosca.setRotation(
   MathUtils.radToDeg(
    (float)Math.atan2(pValueX, -pValueY)));




}
onCreateScene()



controleNaTela.getControlBase().setBlendFunction(
     GLES20.GL_SRC_ALPHA,
     GLES20.GL_ONE_MINUS_SRC_ALPHA);

controleNaTela.getControlBase().setAlpha(0.5f);


cena.setChildScene(controleNaTela);
Pode rodar ... vamos ver o que acontece ...
Trabalhando com AnimatedSprites

De vez em quando, precisamos utilizar animações

                                         Sou um PNG !
                    Colunas




        Linhas
Trabalhando com AnimatedSprites



private ITextureRegion botaoMeioControle;


private TiledTextureRegion banana;                 Só esse tem haver com a Banana !

private PhysicsWorld mundo;

private ArrayList<IShape> listaDeColisoes = new ArrayList<IShape>();
Trabalhando com AnimatedSprites
texturaControle.load();

try {
ITexture texturaBanana = new BitmapTexture(this.getTextureManager(),
  new IInputStreamOpener() {
    @Override
    public InputStream open() throws IOException {
      return getAssets().open("gfx/spr_banana.png");
    }
});

texturaBanana.load();

banana = TextureRegionFactory.extractTiledFromTexture(texturaBanana, 4, 2);
} catch (IOException e1) {
  e1.printStackTrace();
}
final TimerHandler timer = new TimerHandler(3, true, new ITimerCallback() {
  @Override
  public void onTimePassed(TimerHandler pTimerHandler) {

  AnimatedSprite bananaAnimada = new AnimatedSprite(
   LARGURA / 2,
   ALTURA - (ALTURA - 60),
   banana, getVertexBufferObjectManager());

  bananaAnimada.animate(100);
  listaDeColisoes.add(bananaAnimada);
  cena.attachChild(bananaAnimada);

  }
});

timer.setAutoReset(true);

getEngine().registerUpdateHandler(timer);
A cada 3 segundos deve aparecer uma banana dançante na cena
Que tal adicionar movimentos do mundo real ?




Box2D
A 2D Physics Engine for
Games



               http://box2d.org/
onCreateResources()


this.banana = TextureRegionFactory.extractTiledFromTexture(texturaBanana, 4,2);

} catch (IOException e1) {
     e1.printStackTrace();
}



mundo = new PhysicsWorld(

new Vector2(0, SensorManager.GRAVITY_EARTH),

false);
onCreateScene()


cena = new Scene();


cena.registerUpdateHandler(mundo);
onCreateResources()

bananaAnimada.animate(100);
listaDeColisoes.add(bananaAnimada);
cena.attachChild(bananaAnimada);



final FixtureDef material = PhysicsFactory.createFixtureDef(
   10, //densidade
   0.5f, //elasticidade
   0.5f //fricção
);

Body corpo = PhysicsFactory.createBoxBody(
      mundo, bananaAnimada, BodyType.DynamicBody, material);

mundo.registerPhysicsConnector(new PhysicsConnector(
   bananaAnimada, corpo, true, true));
A física atua sobre
                   o corpo, e não
                       sobre o
                  AnimatedSprite
    Body




AnimatedSprite
Pode rodar ... vamos ver o que acontece ...
Ihh... Não tem chão ! Onde as bananas vão parar ?




                      china
onCreateScene()


final Rectangle chao = new Rectangle(
   0, ALTURA - 2,
   LARGURA, 2, getVertexBufferObjectManager());

final FixtureDef material = PhysicsFactory.createFixtureDef(
   0,
   0.8f, //cama pula-pula
   0.5f
);


PhysicsFactory.createBoxBody(mundo, chao, BodyType.StaticBody, material);

cena.attachChild(chao);
Pode rodar ... vamos ver o que acontece ...
Fazendo a rapa das bananas ...
CollisionHandler handlerColisoes = new CollisionHandler(new ICollisionCallback(){
          @Override
          public boolean onCollision(IShape mosca, IShape banana) {


Body corpo = mundo.getPhysicsConnectorManager().findBodyByShape(banana);
PhysicsConnector conector = mundo.
                  getPhysicsConnectorManager().
                  findPhysicsConnectorByShape(banana);

  //mundo.unregisterPhysicsConnector(conector);

  //mundo.destroyBody(corpo);

  banana.detachSelf();


  listaDeColisoes.remove(banana);
  txPontuacao.setText(++placar + "");
         return false;
         }}, mosca, listaDeColisoes);

cena.registerUpdateHandler(handlerColisoes);
Fechamento


Um jogo é semelhante á cena de um filme


Para se criar um jogo é preciso estudo e dedicação


AndEngine possui todas as funcionalidade para criar Jogos 2D


Jogos são os aplicativo mais baixados do GooglePlay
Fechamento

              O que faltou para se ter um bom jogo ?




      StoryBoard bem definido

                        (história)


* Seu amigo designer pode te ajudar !
Fechamento

      O que faltou para se ter um bom jogo ?




 Ranking e pontuação
         (desafios)
Fechamento

       O que faltou para se ter um bom jogo ?


    Estudo sobre os devices que poderão rodar o jogo

                     (usabilidade)




        Tablet                              SmartPhone
Aplausos para o nosso primeiro jogo!
Obrigado por participar




odair.bonin@mobideas.com.br

Mais conteúdo relacionado

Mais procurados

Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
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
 
Regras de Produção: o Motor de Inferência JESS
Regras de Produção:o Motor de Inferência JESSRegras de Produção:o Motor de Inferência JESS
Regras de Produção: o Motor de Inferência JESSelliando dias
 
Apostila de Jogos em Rede com Java
Apostila de Jogos em Rede com JavaApostila de Jogos em Rede com Java
Apostila de Jogos em Rede com JavaMarco Reis
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em PythonLuciano Ramalho
 

Mais procurados (6)

Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
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
 
Computação gráfica
Computação gráficaComputação gráfica
Computação gráfica
 
Regras de Produção: o Motor de Inferência JESS
Regras de Produção:o Motor de Inferência JESSRegras de Produção:o Motor de Inferência JESS
Regras de Produção: o Motor de Inferência JESS
 
Apostila de Jogos em Rede com Java
Apostila de Jogos em Rede com JavaApostila de Jogos em Rede com Java
Apostila de Jogos em Rede com Java
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 

Destaque

Tag Brand Presentation
Tag Brand PresentationTag Brand Presentation
Tag Brand PresentationTonia Gould
 
Nieuwsbrief imc nr. 7
Nieuwsbrief imc nr. 7Nieuwsbrief imc nr. 7
Nieuwsbrief imc nr. 7JGSnel
 
Lingerie Innovative Design
Lingerie Innovative DesignLingerie Innovative Design
Lingerie Innovative DesignCharles Fong
 
Lingerie Catalogue
Lingerie CatalogueLingerie Catalogue
Lingerie CatalogueCharles Fong
 
De Essentie Van Integraal Veranderen
De Essentie Van Integraal VeranderenDe Essentie Van Integraal Veranderen
De Essentie Van Integraal VeranderenJGSnel
 
Community mapping, web GIS and the Creative Rural Economy
Community mapping, web GIS and the Creative Rural EconomyCommunity mapping, web GIS and the Creative Rural Economy
Community mapping, web GIS and the Creative Rural EconomyGreg_French
 
Final Presentation Ed 451 Pill
Final Presentation   Ed 451 PillFinal Presentation   Ed 451 Pill
Final Presentation Ed 451 Pilljquijano
 
软件构造第一章
软件构造第一章软件构造第一章
软件构造第一章guest58ec466
 
Usefulvisitors
UsefulvisitorsUsefulvisitors
UsefulvisitorsKatee Hui
 
Don’T Complain About Your Jo Bs
Don’T Complain About Your Jo BsDon’T Complain About Your Jo Bs
Don’T Complain About Your Jo BsCharles Fong
 
New Member Orientation 2008
New Member Orientation 2008New Member Orientation 2008
New Member Orientation 2008Pegdog
 
Rjc Plus Planning Your Job Search
Rjc Plus Planning Your Job SearchRjc Plus Planning Your Job Search
Rjc Plus Planning Your Job Searchkstrange
 
Motivation Pictures
Motivation PicturesMotivation Pictures
Motivation PicturesCharles Fong
 

Destaque (15)

Tag Brand Presentation
Tag Brand PresentationTag Brand Presentation
Tag Brand Presentation
 
Nieuwsbrief imc nr. 7
Nieuwsbrief imc nr. 7Nieuwsbrief imc nr. 7
Nieuwsbrief imc nr. 7
 
Lingerie Innovative Design
Lingerie Innovative DesignLingerie Innovative Design
Lingerie Innovative Design
 
Lingerie Catalogue
Lingerie CatalogueLingerie Catalogue
Lingerie Catalogue
 
De Essentie Van Integraal Veranderen
De Essentie Van Integraal VeranderenDe Essentie Van Integraal Veranderen
De Essentie Van Integraal Veranderen
 
Community mapping, web GIS and the Creative Rural Economy
Community mapping, web GIS and the Creative Rural EconomyCommunity mapping, web GIS and the Creative Rural Economy
Community mapping, web GIS and the Creative Rural Economy
 
Final Presentation Ed 451 Pill
Final Presentation   Ed 451 PillFinal Presentation   Ed 451 Pill
Final Presentation Ed 451 Pill
 
软件构造第一章
软件构造第一章软件构造第一章
软件构造第一章
 
Usefulvisitors
UsefulvisitorsUsefulvisitors
Usefulvisitors
 
Don’T Complain About Your Jo Bs
Don’T Complain About Your Jo BsDon’T Complain About Your Jo Bs
Don’T Complain About Your Jo Bs
 
Portfolio
PortfolioPortfolio
Portfolio
 
New Member Orientation 2008
New Member Orientation 2008New Member Orientation 2008
New Member Orientation 2008
 
Rjc Plus Planning Your Job Search
Rjc Plus Planning Your Job SearchRjc Plus Planning Your Job Search
Rjc Plus Planning Your Job Search
 
Motivation Pictures
Motivation PicturesMotivation Pictures
Motivation Pictures
 
Attitude 100%
Attitude 100%Attitude 100%
Attitude 100%
 

Semelhante a Oficina Android - Games com AndEngine - Dia 3

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
 
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
 
Advanced topics for game developers
Advanced topics for game developersAdvanced topics for game developers
Advanced topics for game developersjuliocoopergames
 
INdT Mobile Labs - Sparta
INdT Mobile Labs - SpartaINdT Mobile Labs - Sparta
INdT Mobile Labs - SpartaHeitor Carlos
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-androidAlberto Souza
 
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSpherePortando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphereEloi Júnior
 
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr JamDesenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr JamAndré Espeiorin
 
Ubiquitous Language - Portugues
Ubiquitous Language - PortuguesUbiquitous Language - Portugues
Ubiquitous Language - PortuguesAlline Oliveira
 
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
 
Quasi-engine: Desenvolvendo jogos em QML
Quasi-engine: Desenvolvendo jogos em QMLQuasi-engine: Desenvolvendo jogos em QML
Quasi-engine: Desenvolvendo jogos em QMLAnderson Briglia
 
Do zero ao jogo multiplataforma com cocos2d
Do zero ao jogo multiplataforma com cocos2dDo zero ao jogo multiplataforma com cocos2d
Do zero ao jogo multiplataforma com cocos2dVitor Mattos
 
Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Arthur Xavier
 
Desvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor AndroidDesvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor Androidjoaobmonteiro
 
Trabalho em greenfoot
Trabalho em greenfootTrabalho em greenfoot
Trabalho em greenfootVitor Faria
 
JS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionalJS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionaliMasters
 

Semelhante a Oficina Android - Games com AndEngine - Dia 3 (20)

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
 
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...
 
Advanced topics for game developers
Advanced topics for game developersAdvanced topics for game developers
Advanced topics for game developers
 
INdT Mobile Labs - Sparta
INdT Mobile Labs - SpartaINdT Mobile Labs - Sparta
INdT Mobile Labs - Sparta
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-android
 
Minicurso pygame
Minicurso pygameMinicurso pygame
Minicurso pygame
 
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSpherePortando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
 
Tutorial java swing
Tutorial java swingTutorial java swing
Tutorial java swing
 
Idez
IdezIdez
Idez
 
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr JamDesenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
 
Ubiquitous Language - Portugues
Ubiquitous Language - PortuguesUbiquitous Language - Portugues
Ubiquitous Language - Portugues
 
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
 
Quasi-engine: Desenvolvendo jogos em QML
Quasi-engine: Desenvolvendo jogos em QMLQuasi-engine: Desenvolvendo jogos em QML
Quasi-engine: Desenvolvendo jogos em QML
 
Do zero ao jogo multiplataforma com cocos2d
Do zero ao jogo multiplataforma com cocos2dDo zero ao jogo multiplataforma com cocos2d
Do zero ao jogo multiplataforma com cocos2d
 
Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?
 
Desvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor AndroidDesvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor Android
 
Trabalho em greenfoot
Trabalho em greenfootTrabalho em greenfoot
Trabalho em greenfoot
 
GUI Aplicações Gráficas
GUI Aplicações Gráficas GUI Aplicações Gráficas
GUI Aplicações Gráficas
 
Interface grafica
Interface graficaInterface grafica
Interface grafica
 
JS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionalJS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript Funcional
 

Mais de Odair Bonin Borges

TDC2015 - Um drone para chamar de seu
TDC2015 - Um drone para chamar de seuTDC2015 - Um drone para chamar de seu
TDC2015 - Um drone para chamar de seuOdair Bonin Borges
 
DroneLab : a oficina de Drones
DroneLab : a oficina de DronesDroneLab : a oficina de Drones
DroneLab : a oficina de DronesOdair Bonin Borges
 
Realidade Aumentada + Android : Oficina SESC
Realidade Aumentada + Android : Oficina SESCRealidade Aumentada + Android : Oficina SESC
Realidade Aumentada + Android : Oficina SESCOdair Bonin Borges
 
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
 

Mais de Odair Bonin Borges (6)

TDC2015 - Um drone para chamar de seu
TDC2015 - Um drone para chamar de seuTDC2015 - Um drone para chamar de seu
TDC2015 - Um drone para chamar de seu
 
DroneLab : a oficina de Drones
DroneLab : a oficina de DronesDroneLab : a oficina de Drones
DroneLab : a oficina de Drones
 
Oficina kinect
Oficina kinectOficina kinect
Oficina kinect
 
Realidade Aumentada + Android : Oficina SESC
Realidade Aumentada + Android : Oficina SESCRealidade Aumentada + Android : Oficina SESC
Realidade Aumentada + Android : Oficina SESC
 
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
 
Oficina Sesc Android - V1
Oficina Sesc Android - V1Oficina Sesc Android - V1
Oficina Sesc Android - V1
 

Oficina Android - Games com AndEngine - Dia 3

  • 1. Games - V1 { Dia 3
  • 2. Fase 1 : elementos principais TrueType Font LINE Sprite Modifier MoveModifier Sprite RotationModifier JumpModifier Physics Box2D TouchArea SCENE
  • 3. Mudança nos planos ... (pra melhor !) TrueType Font LINE Sprite Modifier MoveModifier Sprite RotationModifier JumpModifier Physics Box2D TouchArea SCENE
  • 4. Textura é a imagem na memória Região define um retângulo para a gráfica. No Android, a largura e Textura. É usado para o sistema altura deve ser em potência de 2 conhecer os Sprites. (32, 64, 128 ...)
  • 5.
  • 6. ... MainActivity extends SimpleBaseGameActivity { private int LARGURA = 800; private int ALTURA = 480; private Scene cena = null; private ITextureRegion regiaoBackground = null; private Font fonte = null; private Text txPontuacao = null; private int placar = 0; private ITextureRegion regiaoMosca = null; private ITextureRegion controle; private ITextureRegion botaoMeioControle; private Camera camera;
  • 7. Remova o Camera da frente @Override public EngineOptions onCreateEngineOptions(){ camera = new Camera(0, 0, LARGURA, ALTURA); EngineOptions opcoes = new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(LARGURA, ALTURA), camera); opcoes.getAudioOptions().setNeedsSound(true); opcoes.setWakeLockOptions(WakeLockOptions.SCREEN_ON); return opcoes; }
  • 8. onCreateResources() BitmapTextureAtlas texturaBitmap = new BitmapTextureAtlas(getTextureManager(),64,64); texturaBitmap.load(); //astalavista, baby regiaoMosca = BitmapTextureAtlasTextureRegionFactory.createFromAsset( texturaBitmap, this, "gfx/mosca.png", 0, 0 ); Mosca
  • 9. BitmapTextureAtlas texturaControle = new BitmapTextureAtlas( getTextureManager(), 256, 128); controle = BitmapTextureAtlasTextureRegionFactory.createFromAsset( texturaControle, this, "gfx/onscreen_control_base.png", 0, 0); botaoMeioControle = BitmapTextureAtlasTextureRegionFactory.createFromAsset( texturaControle, this, "gfx/onscreen_control_knob.png", 128, 0); texturaControle.load();
  • 10. onCreateScene() linha.setColor(Color.YELLOW); linha.setLineWidth(12); cena.attachChild(linha); final Sprite mosca = new Sprite(120, 120, regiaoMosca, getVertexBufferObjectManager()); cena.attachChild(mosca); final PhysicsHandler physicsHandler = new PhysicsHandler(mosca); mosca.registerUpdateHandler(physicsHandler);
  • 11. onCreateScene() final float x = 0; final float y = ALTURA - controle.getHeight(); final AnalogOnScreenControl controleNaTela = new AnalogOnScreenControl( x, y, camera, controle, botaoMeioControle, Listener do controle 0.1f, //tempo para os updates getVertexBufferObjectManager(), null);
  • 13. @Override public void onControlChange( BaseOnScreenControl pBaseOnScreenControl, float pValueX, float pValueY) { //para voar com a mosca physicsHandler.setVelocity(pValueX * 100, pValueY * 100); //para girar com a mosca mosca.setRotation( MathUtils.radToDeg( (float)Math.atan2(pValueX, -pValueY))); }
  • 14. onCreateScene() controleNaTela.getControlBase().setBlendFunction( GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA); controleNaTela.getControlBase().setAlpha(0.5f); cena.setChildScene(controleNaTela);
  • 15. Pode rodar ... vamos ver o que acontece ...
  • 16. Trabalhando com AnimatedSprites De vez em quando, precisamos utilizar animações Sou um PNG ! Colunas Linhas
  • 17. Trabalhando com AnimatedSprites private ITextureRegion botaoMeioControle; private TiledTextureRegion banana; Só esse tem haver com a Banana ! private PhysicsWorld mundo; private ArrayList<IShape> listaDeColisoes = new ArrayList<IShape>();
  • 18. Trabalhando com AnimatedSprites texturaControle.load(); try { ITexture texturaBanana = new BitmapTexture(this.getTextureManager(), new IInputStreamOpener() { @Override public InputStream open() throws IOException { return getAssets().open("gfx/spr_banana.png"); } }); texturaBanana.load(); banana = TextureRegionFactory.extractTiledFromTexture(texturaBanana, 4, 2); } catch (IOException e1) { e1.printStackTrace(); }
  • 19. final TimerHandler timer = new TimerHandler(3, true, new ITimerCallback() { @Override public void onTimePassed(TimerHandler pTimerHandler) { AnimatedSprite bananaAnimada = new AnimatedSprite( LARGURA / 2, ALTURA - (ALTURA - 60), banana, getVertexBufferObjectManager()); bananaAnimada.animate(100); listaDeColisoes.add(bananaAnimada); cena.attachChild(bananaAnimada); } }); timer.setAutoReset(true); getEngine().registerUpdateHandler(timer);
  • 20. A cada 3 segundos deve aparecer uma banana dançante na cena
  • 21. Que tal adicionar movimentos do mundo real ? Box2D A 2D Physics Engine for Games http://box2d.org/
  • 22. onCreateResources() this.banana = TextureRegionFactory.extractTiledFromTexture(texturaBanana, 4,2); } catch (IOException e1) { e1.printStackTrace(); } mundo = new PhysicsWorld( new Vector2(0, SensorManager.GRAVITY_EARTH), false);
  • 23. onCreateScene() cena = new Scene(); cena.registerUpdateHandler(mundo);
  • 24. onCreateResources() bananaAnimada.animate(100); listaDeColisoes.add(bananaAnimada); cena.attachChild(bananaAnimada); final FixtureDef material = PhysicsFactory.createFixtureDef( 10, //densidade 0.5f, //elasticidade 0.5f //fricção ); Body corpo = PhysicsFactory.createBoxBody( mundo, bananaAnimada, BodyType.DynamicBody, material); mundo.registerPhysicsConnector(new PhysicsConnector( bananaAnimada, corpo, true, true));
  • 25. A física atua sobre o corpo, e não sobre o AnimatedSprite Body AnimatedSprite
  • 26. Pode rodar ... vamos ver o que acontece ...
  • 27. Ihh... Não tem chão ! Onde as bananas vão parar ? china
  • 28. onCreateScene() final Rectangle chao = new Rectangle( 0, ALTURA - 2, LARGURA, 2, getVertexBufferObjectManager()); final FixtureDef material = PhysicsFactory.createFixtureDef( 0, 0.8f, //cama pula-pula 0.5f ); PhysicsFactory.createBoxBody(mundo, chao, BodyType.StaticBody, material); cena.attachChild(chao);
  • 29. Pode rodar ... vamos ver o que acontece ...
  • 30. Fazendo a rapa das bananas ... CollisionHandler handlerColisoes = new CollisionHandler(new ICollisionCallback(){ @Override public boolean onCollision(IShape mosca, IShape banana) { Body corpo = mundo.getPhysicsConnectorManager().findBodyByShape(banana); PhysicsConnector conector = mundo. getPhysicsConnectorManager(). findPhysicsConnectorByShape(banana); //mundo.unregisterPhysicsConnector(conector); //mundo.destroyBody(corpo); banana.detachSelf(); listaDeColisoes.remove(banana); txPontuacao.setText(++placar + ""); return false; }}, mosca, listaDeColisoes); cena.registerUpdateHandler(handlerColisoes);
  • 31. Fechamento Um jogo é semelhante á cena de um filme Para se criar um jogo é preciso estudo e dedicação AndEngine possui todas as funcionalidade para criar Jogos 2D Jogos são os aplicativo mais baixados do GooglePlay
  • 32. Fechamento O que faltou para se ter um bom jogo ? StoryBoard bem definido (história) * Seu amigo designer pode te ajudar !
  • 33. Fechamento O que faltou para se ter um bom jogo ? Ranking e pontuação (desafios)
  • 34. Fechamento O que faltou para se ter um bom jogo ? Estudo sobre os devices que poderão rodar o jogo (usabilidade) Tablet SmartPhone
  • 35. Aplausos para o nosso primeiro jogo!