22
Introdução ao Desenvolvimento de Jogos 2D/3D em Java ME (Parte 1) Daniel Valente de Macedo 7° Semestre

Java ME - Game API

Embed Size (px)

DESCRIPTION

CCT - Outubro de 2009

Citation preview

Page 1: Java ME - Game API

Introdução ao Desenvolvimento de Jogos 2D/3D em Java ME (Parte 1)

Daniel Valente de Macedo7° Semestre

Page 2: Java ME - Game API

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

Page 3: Java ME - Game API

Plataforma Java ME

Page 4: Java ME - Game API

Ciclo de Vida do MIDlet

Start

Paused

Destroyed

Active

startApp()

pauseApp()

destroyApp()destroyApp()

Page 5: Java ME - Game API

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.

Page 6: Java ME - Game API

Desenvolvemendo Jogos com MIDP/CLDC 1.0 (Cont.)

public class MeuJogo extends Canvas implements Runnable {

public void run() {

while(true) {

repaint();

}

}

public void paint(Graphics g) {

// Código de desenho

}

protected void keyPressed(int keyCode) {

// Tratamento de teclas

}

}

Exemplo:

Não é possivelter o controle

de quando que o paint() seráchamado.

Também não é possivel saber

quando o keyPressed() échamado, podendo ocorrer

um atraso na resposta,resultando em algo

indesejado.

Page 7: Java ME - Game API

Desenvolvemendo Jogos com MIDP/CLDC 1.0 (Cont.)

Sem o suporte a double buffering, o "pisca-pisca" é constante.

Lógica dedesenho

Imagem namemória

Tela dodispositivo

Lógica dedesenho

Imagem namemória

Tela dodispositivo

Passo 1:

Passo 2:

Double Buffering:

Page 8: Java ME - Game API

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.

Page 9: Java ME - Game API

Classes da Game API

Page 10: Java ME - 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.

Page 11: Java ME - Game API

Game API: GameCanvas

Exemplo:public class MeuJogo extends GameCanvas implements Runnable { public void run() { Graphics g = getGraphics(); while(true) {

int keyState = getKeyStates();

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

render(g); // Logica de desenho

flushGraphics(); //Atualiza tela } }}

Verificação de teclas

Lógica de desenho

Desenha a imagem do buffer na tela do

dispositivo

Page 12: Java ME - Game API

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)

Page 13: Java ME - Game API

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

Page 14: Java ME - Game API

Game API: Sprite

Frames e animação:

Arquivo .png Divisão internano Sprite

Page 15: Java ME - Game API

Game API: Sprite

Transformações:

macaco.setTransform(Sprite.TRANS_NONE)

macaco.setTransform(Sprite.TRANS_ROT90)

Page 16: Java ME - Game API

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

Page 17: Java ME - Game API

Game API: TiledLayer

Page 18: Java ME - Game API

Game API: LayerManager

Classe responsável por gerenciar todos os Layers. Sprite TiledLayer

Page 19: Java ME - Game API

Game Loop

Page 20: Java ME - Game API

Game Loop (cont.)

public class MeuJogo extends GameCanvas implements Runnable {

private boolean running;

private int delay = 30;

public SimpleGameCanvas() {

super(true);

}

public void start() {

running = true;

Thread t = new Thread(this);

t.start();

}

public void stop() { running = false; }

public void run() {

Graphics g = getGraphics();

while (running) {

checkInput();

update();

render(g);

flushGraphics();

try { Thread.sleep(delay); }

catch (InterruptedException ie) { stop(); }

}

}

private void update() {}

private void checkInput() {}

private void render(Graphics g) {}

}

Page 21: Java ME - Game API

FIM

Perguntas ou Dùvidas?

Page 22: Java ME - Game API

Contato

Obrigado!

[email protected]

http://danielvalente.com.br