SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
Introdução ao Desenvolvimento de Jogos
       2D/3D em Java ME (Parte 1)




           Daniel Valente de Macedo
                  7° Semestre
Por que Java ME?

   Portabilidade, pois ja é suportado pela maioria
    dos dispositivos móveis disponíveis no
    mercado.
   Curva de aprendizagem pequena.
   Possui ótimas ferramentas de desenvolvimento
    como o Eclipse e o Netbeans.
   Comunidade ativa e participativa (forums,
    blogs, etc).
Plataforma Java ME
Ciclo de Vida do MIDlet


             Start




                         startApp()

            Paused       pauseApp()     Active



          destroyApp()                destroyApp()


                         Destroyed
Desenvolvemendo Jogos com
MIDP/CLDC 1.0

   Não possui suporte a ponto flutuante (CLDC
    1.0), dificultando o desenvolvimento de jogos
    3D.
   Precário suporte a som, somente a beeps.
   Não possui suporte a transparência.
   Não é possivel tratar múltiplas teclas
    pressionadas ao mesmo tempo.
Desenvolvemendo Jogos com
MIDP/CLDC 1.0 (Cont.)
       Exemplo:
public class MeuJogo extends Canvas implements Runnable {

    public void run() {
                                                Não é possivel
        while(true) {                            ter o controle
            repaint();                         de quando que o
                                                  paint() será
        }                                          chamado.
    }

    public void paint(Graphics g) {                     Também não é
        // Código de desenho
                                                         possivel saber
                                                    quando o keyPressed() é
    }                                              chamado, podendo ocorrer
                                                     um atraso na resposta,
    protected void keyPressed(int keyCode) {
                                                      resultando em algo
        // Tratamento de teclas                            indesejado.
    }

}
Desenvolvemendo Jogos com
MIDP/CLDC 1.0 (Cont.)

   Sem o suporte a double buffering, o "pisca-
    pisca" é constante.
     Double Buffering:


                Lógica de   Imagem na     Tela do
     Passo 1:   desenho      memória    dispositivo




                Lógica de   Imagem na     Tela do
     Passo 2:
                desenho      memória    dispositivo
Desenvolvemendo Jogos com a Game
API

   Disponível no MIDP 2.0
   Possui um conjunto de classes bem otimizadas
    voltadas ao desenvolvimento de jogos.
   Possui suporte a ponto flutuante (CLDC 1.1)
   Suporte completo a som (mp3, wav, etc).
   Possui suporte a transpareência.
   É possível tratar múltiplas teclas pressionadas
    ao mesmo tempo.
Classes da Game API
Game API: GameCanvas

   Possui double buffering implementado.
   É possível atualizar a tela no momento
    desejado, onde todos componentes visuais já
    foram atualizados.
   É possível detectar várias teclas pressionadas
    ao mesmo tempo, diferentemente do Canvas.
Game API: GameCanvas

       Exemplo:
public class MeuJogo extends GameCanvas implements Runnable {
  public void run() {
    Graphics g = getGraphics();
    while(true) {                                   Verificação de teclas

            int keyState = getKeyStates();

            if((keyState & UP_PRESSED) != 0) {
               // Tecla UP está pressionada
            }                                           Lógica de desenho
            else if((keyState & DOWN_PRESSED) != 0) {
               // Tecla DOWN está pressionada
            }

            render(g); // Logica de desenho               Desenha a imagem do
                                                             buffer na tela do
            flushGraphics(); //Atualiza tela                    dispositivo
        }
    }
}
Game API: Layer

   Classe abstrata que representa qualquer
    elemento visual na Game API.
   Possui metodos como:
       boolean isVisible()
       void setVisible(boolean visible)
       void move(int dx, int dy)
       voi setPosition(int x, int y)
       abstract void paint(Graphics g)
Game API: Sprite

   Classe que representa uma imagem no jogo,
    por exemplo: Personagem e o Inimigo.
   Possui suporte a frames e animação.
   Possui detecção de colisão por caixa e pixel-a-
    pixel.
   Suporta algumas transformações sobre a
    imagem (Espelhamento, 90°, 180°, 270°...).
Game API: Sprite

   Frames e animação:
                   Divisão interna
    Arquivo .png
                      no Sprite
Game API: Sprite

    Transformações:




                               macaco.setTransform(Sprite.TRANS_ROT90)




macaco.setTransform(Sprite.TRANS_NONE)
Game API: TiledLayer

   Classe que normalmente é usada para
    representações de mapas, utilizando uma
    matriz bidimensional com índices de imagens.
   Possui suporte a tiles animadas (efeito de água
    se movimentando e etc).
Game API: TiledLayer
Game API: LayerManager

   Classe responsável por gerenciar todos os
    Layers.
       Sprite
       TiledLayer
Game Loop
Game Loop (cont.)
public class MeuJogo extends GameCanvas        public void run() {
implements Runnable {
                                                   Graphics g = getGraphics();
 private boolean running;
                                                   while (running) {
 private int delay = 30;
                                                       checkInput();
 public SimpleGameCanvas() {
                                                       update();
     super(true);
                                                       render(g);
 }
                                                       flushGraphics();
 public void start() {
                                                       try { Thread.sleep(delay); }
     running = true;
                                                       catch (InterruptedException ie) { stop(); }
     Thread t = new Thread(this);
                                                   }
     t.start();
                                               }
 }
                                               private void update() {}
 public void stop() { running = false; }
                                               private void checkInput() {}

                                               private void render(Graphics g) {}

                                           }
FIM




      Perguntas ou Dùvidas?
Contato



                 Obrigado!

     danielvalentemacedo@gmail.com

          http://danielvalente.com.br

Weitere ähnliche Inhalte

Was ist angesagt?

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
 
Advanced topics for game developers
Advanced topics for game developersAdvanced topics for game developers
Advanced topics for game developersjuliocoopergames
 
Desenvolvimento de Jogos em Java
Desenvolvimento de Jogos em JavaDesenvolvimento de Jogos em Java
Desenvolvimento de Jogos em JavaBruno Croci
 
Introdução ao Desenvolvimento de Jogos
Introdução ao Desenvolvimento de JogosIntrodução ao Desenvolvimento de Jogos
Introdução ao Desenvolvimento de JogosGabriel Giordano Medina
 
Robot Lego programado em Java
Robot Lego programado em JavaRobot Lego programado em Java
Robot Lego programado em JavaJoao Alves
 
Visualg primeira interação
Visualg   primeira interaçãoVisualg   primeira interação
Visualg primeira interaçãoHumberto Cepep
 
Apostila De Visualg
Apostila De VisualgApostila De Visualg
Apostila De Visualgecompo
 
Lógica de programação com visu alg
Lógica de programação com visu algLógica de programação com visu alg
Lógica de programação com visu algLeandro Santos
 

Was ist angesagt? (12)

Guia xna
Guia xnaGuia xna
Guia xna
 
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
 
Desenvolvimento iOS
Desenvolvimento iOSDesenvolvimento iOS
Desenvolvimento iOS
 
Advanced topics for game developers
Advanced topics for game developersAdvanced topics for game developers
Advanced topics for game developers
 
Desenvolvimento de Jogos em Java
Desenvolvimento de Jogos em JavaDesenvolvimento de Jogos em Java
Desenvolvimento de Jogos em Java
 
Introdução ao Desenvolvimento de Jogos
Introdução ao Desenvolvimento de JogosIntrodução ao Desenvolvimento de Jogos
Introdução ao Desenvolvimento de Jogos
 
CURSO JAVA 02
CURSO JAVA 02CURSO JAVA 02
CURSO JAVA 02
 
Robot Lego programado em Java
Robot Lego programado em JavaRobot Lego programado em Java
Robot Lego programado em Java
 
Visualg primeira interação
Visualg   primeira interaçãoVisualg   primeira interação
Visualg primeira interação
 
Apostila De Visualg
Apostila De VisualgApostila De Visualg
Apostila De Visualg
 
Manual gimp
Manual gimpManual gimp
Manual gimp
 
Lógica de programação com visu alg
Lógica de programação com visu algLógica de programação com visu alg
Lógica de programação com visu alg
 

Andere mochten auch

Devoxx 2008 at CCT Jan/2009
Devoxx 2008 at CCT Jan/2009Devoxx 2008 at CCT Jan/2009
Devoxx 2008 at CCT Jan/2009Daniel De Macedo
 
LWUIT: Uma alternativa para interface gráfica em dispositivos móveis
LWUIT: Uma alternativa para interface gráfica em dispositivos móveisLWUIT: Uma alternativa para interface gráfica em dispositivos móveis
LWUIT: Uma alternativa para interface gráfica em dispositivos móveisDaniel De Macedo
 
Introdução a game api do java me
Introdução a game api do java meIntrodução a game api do java me
Introdução a game api do java meErisvaldo Junior
 
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your BusinessBarry Feldman
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsLinkedIn
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerLuminary Labs
 

Andere mochten auch (7)

Devoxx 2008 at CCT Jan/2009
Devoxx 2008 at CCT Jan/2009Devoxx 2008 at CCT Jan/2009
Devoxx 2008 at CCT Jan/2009
 
LWUIT: Uma alternativa para interface gráfica em dispositivos móveis
LWUIT: Uma alternativa para interface gráfica em dispositivos móveisLWUIT: Uma alternativa para interface gráfica em dispositivos móveis
LWUIT: Uma alternativa para interface gráfica em dispositivos móveis
 
Introdução a game api do java me
Introdução a game api do java meIntrodução a game api do java me
Introdução a game api do java me
 
Blender 3 D
Blender 3 DBlender 3 D
Blender 3 D
 
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
 

Ähnlich wie Java ME - Game API

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
 
Desenvolvendo games multiplataforma
Desenvolvendo games multiplataformaDesenvolvendo games multiplataforma
Desenvolvendo games multiplataformaAndré Santee
 
Arduino genius com display lcd 16x2 usando i2 c
Arduino  genius com display lcd 16x2 usando i2 cArduino  genius com display lcd 16x2 usando i2 c
Arduino genius com display lcd 16x2 usando i2 cThiago Pereira
 
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
 
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
 
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.
Desenvolvendo Jogos com pygame.Desenvolvendo Jogos com pygame.
Desenvolvendo Jogos com pygame.Tchelinux
 
Introdução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livreIntrodução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livrepichiliani
 
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
 
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
 
Processo de desenvolvimento de Jogos.pdf
Processo de desenvolvimento de Jogos.pdfProcesso de desenvolvimento de Jogos.pdf
Processo de desenvolvimento de Jogos.pdfJean Marie Jhon
 
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
 
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)Fernando Passold
 
Apresentação tcd
Apresentação tcdApresentação tcd
Apresentação tcdThata2012
 

Ähnlich wie Java ME - Game API (20)

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
 
Desenvolvendo games multiplataforma
Desenvolvendo games multiplataformaDesenvolvendo games multiplataforma
Desenvolvendo games multiplataforma
 
Arduino genius com display lcd 16x2 usando i2 c
Arduino  genius com display lcd 16x2 usando i2 cArduino  genius com display lcd 16x2 usando i2 c
Arduino genius com display lcd 16x2 usando i2 c
 
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
 
Interação (OpenGL)
Interação (OpenGL)Interação (OpenGL)
Interação (OpenGL)
 
Biblioteca Allegro
Biblioteca AllegroBiblioteca Allegro
Biblioteca Allegro
 
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
 
Programação de jogos eletrônicos
Programação de jogos eletrônicosProgramação de jogos eletrônicos
Programação de jogos eletrônicos
 
Minicurso pygame
Minicurso pygameMinicurso pygame
Minicurso pygame
 
Desenvolvendo Jogos com pygame.
Desenvolvendo Jogos com pygame.Desenvolvendo Jogos com pygame.
Desenvolvendo Jogos com pygame.
 
Introdução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livreIntrodução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livre
 
Aula menus
Aula menusAula menus
Aula menus
 
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
 
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
 
Processo de desenvolvimento de Jogos.pdf
Processo de desenvolvimento de Jogos.pdfProcesso de desenvolvimento de Jogos.pdf
Processo de desenvolvimento de Jogos.pdf
 
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
 
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
 
Apresentação tcd
Apresentação tcdApresentação tcd
Apresentação tcd
 
Utilizandoo winplot
Utilizandoo winplotUtilizandoo winplot
Utilizandoo winplot
 
Viewport (OpenGL)
Viewport (OpenGL)Viewport (OpenGL)
Viewport (OpenGL)
 

Java ME - Game API

  • 1. Introdução ao Desenvolvimento de Jogos 2D/3D em Java ME (Parte 1) Daniel Valente de Macedo 7° Semestre
  • 2. Por que Java ME?  Portabilidade, pois ja é suportado pela maioria dos dispositivos móveis disponíveis no mercado.  Curva de aprendizagem pequena.  Possui ótimas ferramentas de desenvolvimento como o Eclipse e o Netbeans.  Comunidade ativa e participativa (forums, blogs, etc).
  • 4. Ciclo de Vida do MIDlet Start startApp() Paused pauseApp() Active destroyApp() destroyApp() Destroyed
  • 5. Desenvolvemendo Jogos com MIDP/CLDC 1.0  Não possui suporte a ponto flutuante (CLDC 1.0), dificultando o desenvolvimento de jogos 3D.  Precário suporte a som, somente a beeps.  Não possui suporte a transparência.  Não é possivel tratar múltiplas teclas pressionadas ao mesmo tempo.
  • 6. Desenvolvemendo Jogos com MIDP/CLDC 1.0 (Cont.)  Exemplo: public class MeuJogo extends Canvas implements Runnable { public void run() { Não é possivel while(true) { ter o controle repaint(); de quando que o paint() será } chamado. } public void paint(Graphics g) { Também não é // Código de desenho possivel saber quando o keyPressed() é } chamado, podendo ocorrer um atraso na resposta, protected void keyPressed(int keyCode) { resultando em algo // Tratamento de teclas indesejado. } }
  • 7. Desenvolvemendo Jogos com MIDP/CLDC 1.0 (Cont.)  Sem o suporte a double buffering, o "pisca- pisca" é constante. Double Buffering: Lógica de Imagem na Tela do Passo 1: desenho memória dispositivo Lógica de Imagem na Tela do Passo 2: desenho memória dispositivo
  • 8. Desenvolvemendo Jogos com a Game API  Disponível no MIDP 2.0  Possui um conjunto de classes bem otimizadas voltadas ao desenvolvimento de jogos.  Possui suporte a ponto flutuante (CLDC 1.1)  Suporte completo a som (mp3, wav, etc).  Possui suporte a transpareência.  É possível tratar múltiplas teclas pressionadas ao mesmo tempo.
  • 10. Game API: GameCanvas  Possui double buffering implementado.  É possível atualizar a tela no momento desejado, onde todos componentes visuais já foram atualizados.  É possível detectar várias teclas pressionadas ao mesmo tempo, diferentemente do Canvas.
  • 11. Game API: GameCanvas  Exemplo: public class MeuJogo extends GameCanvas implements Runnable { public void run() { Graphics g = getGraphics(); while(true) { Verificação de teclas int keyState = getKeyStates(); if((keyState & UP_PRESSED) != 0) { // Tecla UP está pressionada } Lógica de desenho else if((keyState & DOWN_PRESSED) != 0) { // Tecla DOWN está pressionada } render(g); // Logica de desenho Desenha a imagem do buffer na tela do flushGraphics(); //Atualiza tela dispositivo } } }
  • 12. Game API: Layer  Classe abstrata que representa qualquer elemento visual na Game API.  Possui metodos como:  boolean isVisible()  void setVisible(boolean visible)  void move(int dx, int dy)  voi setPosition(int x, int y)  abstract void paint(Graphics g)
  • 13. Game API: Sprite  Classe que representa uma imagem no jogo, por exemplo: Personagem e o Inimigo.  Possui suporte a frames e animação.  Possui detecção de colisão por caixa e pixel-a- pixel.  Suporta algumas transformações sobre a imagem (Espelhamento, 90°, 180°, 270°...).
  • 14. Game API: Sprite  Frames e animação: Divisão interna Arquivo .png no Sprite
  • 15. Game API: Sprite  Transformações: macaco.setTransform(Sprite.TRANS_ROT90) macaco.setTransform(Sprite.TRANS_NONE)
  • 16. Game API: TiledLayer  Classe que normalmente é usada para representações de mapas, utilizando uma matriz bidimensional com índices de imagens.  Possui suporte a tiles animadas (efeito de água se movimentando e etc).
  • 18. Game API: LayerManager  Classe responsável por gerenciar todos os Layers.  Sprite  TiledLayer
  • 20. Game Loop (cont.) public class MeuJogo extends GameCanvas public void run() { implements Runnable { Graphics g = getGraphics(); private boolean running; while (running) { private int delay = 30; checkInput(); public SimpleGameCanvas() { update(); super(true); render(g); } flushGraphics(); public void start() { try { Thread.sleep(delay); } running = true; catch (InterruptedException ie) { stop(); } Thread t = new Thread(this); } t.start(); } } private void update() {} public void stop() { running = false; } private void checkInput() {} private void render(Graphics g) {} }
  • 21. FIM Perguntas ou Dùvidas?
  • 22. Contato Obrigado! danielvalentemacedo@gmail.com http://danielvalente.com.br