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).