SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

Mais procurados (12)

Guia xna
Guia xnaGuia xna
Guia xna
Sérgio Barbosa
 
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
Vitor Mattos
 
Desenvolvimento iOS
Desenvolvimento iOSDesenvolvimento iOS
Desenvolvimento iOS
André Espeiorin
 
Advanced topics for game developers
Advanced topics for game developersAdvanced topics for game developers
Advanced topics for game developers
juliocoopergames
 
Desenvolvimento de Jogos em Java
Desenvolvimento de Jogos em JavaDesenvolvimento de Jogos em Java
Desenvolvimento de Jogos em Java
Bruno Croci
 
Introdução ao Desenvolvimento de Jogos
Introdução ao Desenvolvimento de JogosIntrodução ao Desenvolvimento de Jogos
Introdução ao Desenvolvimento de Jogos
Gabriel Giordano Medina
 
CURSO JAVA 02
CURSO JAVA 02CURSO JAVA 02
CURSO JAVA 02
Capacitações.com.br Altemar Galvão
 
Robot Lego programado em Java
Robot Lego programado em JavaRobot Lego programado em Java
Robot Lego programado em Java
Joao Alves
 
Visualg primeira interação
Visualg   primeira interaçãoVisualg   primeira interação
Visualg primeira interação
Humberto Cepep
 
Apostila De Visualg
Apostila De VisualgApostila De Visualg
Apostila De Visualg
ecompo
 
Manual gimp
Manual gimpManual gimp
Manual gimp
Susana Cascais
 
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
Leandro Santos
 
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
Vitor Mattos
 
Advanced topics for game developers
Advanced topics for game developersAdvanced topics for game developers
Advanced topics for game developers
juliocoopergames
 
Desenvolvimento de Jogos em Java
Desenvolvimento de Jogos em JavaDesenvolvimento de Jogos em Java
Desenvolvimento de Jogos em Java
Bruno Croci
 
Introdução ao Desenvolvimento de Jogos
Introdução ao Desenvolvimento de JogosIntrodução ao Desenvolvimento de Jogos
Introdução ao Desenvolvimento de Jogos
Gabriel Giordano Medina
 
Robot Lego programado em Java
Robot Lego programado em JavaRobot Lego programado em Java
Robot Lego programado em Java
Joao Alves
 
Visualg primeira interação
Visualg   primeira interaçãoVisualg   primeira interação
Visualg primeira interação
Humberto Cepep
 
Apostila De Visualg
Apostila De VisualgApostila De Visualg
Apostila De Visualg
ecompo
 
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
Leandro Santos
 

Destaque (7)

Devoxx 2008 at CCT Jan/2009
Devoxx 2008 at CCT Jan/2009Devoxx 2008 at CCT Jan/2009
Devoxx 2008 at CCT Jan/2009
Daniel 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óveis
Daniel 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 me
Erisvaldo Junior
 
Blender 3 D
Blender 3 DBlender 3 D
Blender 3 D
Daniel De Macedo
 
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
Barry 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 Cars
LinkedIn
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
Luminary Labs
 
Devoxx 2008 at CCT Jan/2009
Devoxx 2008 at CCT Jan/2009Devoxx 2008 at CCT Jan/2009
Devoxx 2008 at CCT Jan/2009
Daniel 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óveis
Daniel 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 me
Erisvaldo 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 Business
Barry 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 Cars
LinkedIn
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
Luminary Labs
 
Anúncio

Semelhante a Java ME - Game API (20)

JavaME
JavaMEJavaME
JavaME
Elenilson Vieira
 
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
Eloi Júnior
 
JavaME - Aula 2
JavaME - Aula 2JavaME - Aula 2
JavaME - Aula 2
Elenilson Vieira
 
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
Diego Lopes
 
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
iMasters
 
Jogo para dispositivos móveis
Jogo para dispositivos móveisJogo para dispositivos móveis
Jogo para dispositivos móveis
Cristiano Agosti
 
Usando JavaFx No Desenvolvimento De Jogos
Usando JavaFx No Desenvolvimento De JogosUsando JavaFx No Desenvolvimento De Jogos
Usando JavaFx No Desenvolvimento De Jogos
Hamilton Lima
 
Desenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDKDesenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDK
Bruno Cicanci
 
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
Odair Bonin Borges
 
Processo de desenvolvimento de Jogos.pdf
Processo de desenvolvimento de Jogos.pdfProcesso de desenvolvimento de Jogos.pdf
Processo de desenvolvimento de Jogos.pdf
Jean 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 2
Odair Bonin Borges
 
Game API – Java ME Série 40
Game API – Java ME Série 40Game API – Java ME Série 40
Game API – Java ME Série 40
Microsoft Mobile Developer
 
Introdução a Programação de Dispositivos Móveis
Introdução a Programação de Dispositivos MóveisIntrodução a Programação de Dispositivos Móveis
Introdução a Programação de Dispositivos Móveis
igorpimentel
 
Aplicacoes gráficas em Java
Aplicacoes gráficas em JavaAplicacoes gráficas em Java
Aplicacoes gráficas em Java
Marco Reis
 
Apostila JavaME
Apostila JavaMEApostila JavaME
Apostila JavaME
Elenilson Vieira
 
Marlon Luz - Desenvolvendo games para Nokia Ssha
Marlon Luz - Desenvolvendo games para Nokia SshaMarlon Luz - Desenvolvendo games para Nokia Ssha
Marlon Luz - Desenvolvendo games para Nokia Ssha
INdT
 
Interface grafica
Interface graficaInterface grafica
Interface grafica
Ialis Cavalcante
 
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
Odair Bonin Borges
 
Programação e Estruturas de Dados - Lic. Design e Multimédia
Programação e Estruturas de Dados - Lic. Design e MultimédiaProgramação e Estruturas de Dados - Lic. Design e Multimédia
Programação e Estruturas de Dados - Lic. Design e Multimédia
amilcardoso
 
JavaME - Aula 1
JavaME - Aula 1JavaME - Aula 1
JavaME - Aula 1
Elenilson Vieira
 
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
Eloi Júnior
 
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
Diego Lopes
 
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
iMasters
 
Jogo para dispositivos móveis
Jogo para dispositivos móveisJogo para dispositivos móveis
Jogo para dispositivos móveis
Cristiano Agosti
 
Usando JavaFx No Desenvolvimento De Jogos
Usando JavaFx No Desenvolvimento De JogosUsando JavaFx No Desenvolvimento De Jogos
Usando JavaFx No Desenvolvimento De Jogos
Hamilton Lima
 
Desenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDKDesenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDK
Bruno Cicanci
 
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
Odair Bonin Borges
 
Processo de desenvolvimento de Jogos.pdf
Processo de desenvolvimento de Jogos.pdfProcesso de desenvolvimento de Jogos.pdf
Processo de desenvolvimento de Jogos.pdf
Jean 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 2
Odair Bonin Borges
 
Introdução a Programação de Dispositivos Móveis
Introdução a Programação de Dispositivos MóveisIntrodução a Programação de Dispositivos Móveis
Introdução a Programação de Dispositivos Móveis
igorpimentel
 
Aplicacoes gráficas em Java
Aplicacoes gráficas em JavaAplicacoes gráficas em Java
Aplicacoes gráficas em Java
Marco Reis
 
Marlon Luz - Desenvolvendo games para Nokia Ssha
Marlon Luz - Desenvolvendo games para Nokia SshaMarlon Luz - Desenvolvendo games para Nokia Ssha
Marlon Luz - Desenvolvendo games para Nokia Ssha
INdT
 
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
Odair Bonin Borges
 
Programação e Estruturas de Dados - Lic. Design e Multimédia
Programação e Estruturas de Dados - Lic. Design e MultimédiaProgramação e Estruturas de Dados - Lic. Design e Multimédia
Programação e Estruturas de Dados - Lic. Design e Multimédia
amilcardoso
 
Anúncio

Último (8)

Considerações sobre Aspectos Normativos do Projeto de Estruturas de Concreto
Considerações  sobre Aspectos Normativos do Projeto de Estruturas de ConcretoConsiderações  sobre Aspectos Normativos do Projeto de Estruturas de Concreto
Considerações sobre Aspectos Normativos do Projeto de Estruturas de Concreto
NicforoMedeiros1
 
Trabalho Informática 2040 Eduardo Gomes - Carrinho Bluetooth.pdf
Trabalho Informática 2040 Eduardo Gomes - Carrinho Bluetooth.pdfTrabalho Informática 2040 Eduardo Gomes - Carrinho Bluetooth.pdf
Trabalho Informática 2040 Eduardo Gomes - Carrinho Bluetooth.pdf
JuanMalafaia
 
Aula de POO, Classes, objetos e encapsulamento
Aula de POO, Classes, objetos e encapsulamentoAula de POO, Classes, objetos e encapsulamento
Aula de POO, Classes, objetos e encapsulamento
EmliaNogueira5
 
Introdução_Informática_Aula_nº16_2024.pptx
Introdução_Informática_Aula_nº16_2024.pptxIntrodução_Informática_Aula_nº16_2024.pptx
Introdução_Informática_Aula_nº16_2024.pptx
RaimundoCuco3
 
Introdução_Informática_Aula_nº2_2024.pptx
Introdução_Informática_Aula_nº2_2024.pptxIntrodução_Informática_Aula_nº2_2024.pptx
Introdução_Informática_Aula_nº2_2024.pptx
RaimundoCuco3
 
Fuzzing: Finding Your Own Bugs and 0days! 2.0 PT-BR by Rodolpho Concurde
Fuzzing: Finding Your Own Bugs and 0days! 2.0 PT-BR by Rodolpho ConcurdeFuzzing: Finding Your Own Bugs and 0days! 2.0 PT-BR by Rodolpho Concurde
Fuzzing: Finding Your Own Bugs and 0days! 2.0 PT-BR by Rodolpho Concurde
Rodolpho Concurde
 
Aula de Pesquisa Operacional Revisão de Álgebra linear
Aula de Pesquisa Operacional Revisão de Álgebra linearAula de Pesquisa Operacional Revisão de Álgebra linear
Aula de Pesquisa Operacional Revisão de Álgebra linear
EmliaNogueira5
 
Aula de POO, Herança, Composição, Polimorfismo
Aula de POO, Herança, Composição, PolimorfismoAula de POO, Herança, Composição, Polimorfismo
Aula de POO, Herança, Composição, Polimorfismo
EmliaNogueira5
 
Considerações sobre Aspectos Normativos do Projeto de Estruturas de Concreto
Considerações  sobre Aspectos Normativos do Projeto de Estruturas de ConcretoConsiderações  sobre Aspectos Normativos do Projeto de Estruturas de Concreto
Considerações sobre Aspectos Normativos do Projeto de Estruturas de Concreto
NicforoMedeiros1
 
Trabalho Informática 2040 Eduardo Gomes - Carrinho Bluetooth.pdf
Trabalho Informática 2040 Eduardo Gomes - Carrinho Bluetooth.pdfTrabalho Informática 2040 Eduardo Gomes - Carrinho Bluetooth.pdf
Trabalho Informática 2040 Eduardo Gomes - Carrinho Bluetooth.pdf
JuanMalafaia
 
Aula de POO, Classes, objetos e encapsulamento
Aula de POO, Classes, objetos e encapsulamentoAula de POO, Classes, objetos e encapsulamento
Aula de POO, Classes, objetos e encapsulamento
EmliaNogueira5
 
Introdução_Informática_Aula_nº16_2024.pptx
Introdução_Informática_Aula_nº16_2024.pptxIntrodução_Informática_Aula_nº16_2024.pptx
Introdução_Informática_Aula_nº16_2024.pptx
RaimundoCuco3
 
Introdução_Informática_Aula_nº2_2024.pptx
Introdução_Informática_Aula_nº2_2024.pptxIntrodução_Informática_Aula_nº2_2024.pptx
Introdução_Informática_Aula_nº2_2024.pptx
RaimundoCuco3
 
Fuzzing: Finding Your Own Bugs and 0days! 2.0 PT-BR by Rodolpho Concurde
Fuzzing: Finding Your Own Bugs and 0days! 2.0 PT-BR by Rodolpho ConcurdeFuzzing: Finding Your Own Bugs and 0days! 2.0 PT-BR by Rodolpho Concurde
Fuzzing: Finding Your Own Bugs and 0days! 2.0 PT-BR by Rodolpho Concurde
Rodolpho Concurde
 
Aula de Pesquisa Operacional Revisão de Álgebra linear
Aula de Pesquisa Operacional Revisão de Álgebra linearAula de Pesquisa Operacional Revisão de Álgebra linear
Aula de Pesquisa Operacional Revisão de Álgebra linear
EmliaNogueira5
 
Aula de POO, Herança, Composição, Polimorfismo
Aula de POO, Herança, Composição, PolimorfismoAula de POO, Herança, Composição, Polimorfismo
Aula de POO, Herança, Composição, Polimorfismo
EmliaNogueira5
 

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! [email protected] http://danielvalente.com.br