Ola pessoal esta é minha primeira postagem no forum, e espero a juda de voces.
Estou tentando movimentar o personagem(pulo, correr, andar, atirar, etc) sendo que a cada movimento possui uma animação de cerca de 4 a 6 SPRITES pintar.
Minha duvida no momento é a seguinte, como faço para pintar na tela todas as imagem da respectiva animação, apenas com um pressionamento no teclado?
eis minhas classes:
GAME.java
[code]import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
public class Game extends JFrame {
BufferedImage backBuffer;
int FPS = 25;
int janelaW = 500;
int janelaH = 500;
Graphics bbg, g;
//ISSO JÁ ESTAVA AQUI
Manipulador listener = new Manipulador();
//ESSA É A NOSSA SPRITE!
//VERIFIQUE AGORA O MÉTODO inicializar()
//LÁ VAMOS INICIAR AS IMAGENS QUE VAMOS USAR NESSA SPRITE!
//DEPOIS VERIFIQUE O MÉTODO desenharGraficos()
//VEJA QUE ESSA SPRITE TEM 3 CENAS!!!
public Sprite vilao = new Sprite(3, 200, 330);
ImageIcon fundo = new ImageIcon("src/tutorial08/fundo.png");
public void atualizar() {
}
public void desenharGraficos() {
//ISSO TAMBÉM JÁ ESTAVA AQUI...
//AQUI VAMOS MANDAR DESENHAR ALGUNS IMAGENS NA TELA
g = getGraphics();
bbg = backBuffer.getGraphics();
bbg.drawImage(fundo.getImage(),0,0,this);//QUI DESENHAMOS O FUNDO
//AS DIMENSÕES ORIGINAIS DO FUNDO SÃO: 500X500 QUE É O TAMANHO DA NOSSA TELA!
//AQUI TO DESENHANDO A O NOSSO PERSONAGEM
//VEJA QUE NOSSO vilão tem tudo que agente precisa!
//SUAS COORDENADAS, LARGURA, ALTURA, E AS IMAGENS!!!
bbg.drawImage(vilao.cenas[vilao.cena].getImage(), vilao.x, vilao.y, this);
//==================================================================================
g.drawImage(backBuffer, 0, 0, this);//OBS: ISSO DEVE FICAR SEMPRE NO FINAL!
}
public void inicializar() {
setTitle("Titulo do Jogo!");
setSize(janelaW, janelaH);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(null);
setVisible(true);
backBuffer = new BufferedImage(janelaW, janelaH, BufferedImage.TYPE_INT_RGB);
addKeyListener(listener);
//QUI CARREGAMOS AS IMAGENS DE NOSSA SPIRTE!!!!!!!
//PARA O VETOR DE ImageIcon[] !!!
vilao.cenas[0] = new ImageIcon("src/imagem1.gif");
vilao.cenas[1] = new ImageIcon("src/imagem2.gif");
vilao.cenas[2] = new ImageIcon("src/imagem3.gif");
vilao.largura = 100; //LARGURA DO VILÃO
vilao.altura = 200; //ALTURA DO VILÃO , mas não vou usar isso agora..
}
public void run() {
inicializar();
while (true) {
atualizar();
try {
Thread.sleep(1000/FPS);
} catch (Exception e) {
System.out.println("Thread interrompida!");
}
}
}
public static void main(String[] args) {
Game game = new Game();
game.run();
}
class Manipulador implements KeyListener{
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_0) {
for(int i =0; i<3;++i){
vilao.animar();
desenharGraficos();
}}
}
@Override
public void keyReleased(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_0){
vilao.cena = 0;
}
}
}
}
[/code]
SPRITE.java
[code]import javax.swing.ImageIcon;
public class Sprite{
ImageIcon cenas[]; //VETOR DE IMAGENS,
int x; //AQUI É A COORDENADA X
int y; //AQUI É A COORDENADA Y
int largura; //LARGURA DA IMAGEM, CASO QUEIRA DEFINIR UMA
int altura; //ALTURA DA IMAGEM, CASO QUEIRA DEFINIR UMA
int cena = 0; //O INDICE DA CENA DA NOSSA SPRITE ANIMADA
int controlaVelocidade = 0;
int velocidade = 5;
//ISSO AQUI EM BAIXO PRA QUEM NÃO SABE É UM CONSTRUTOR
//QUANDO FORMOS CRIAR UM OBJETO A PARTIR DESSA CLASSE
//TEREMOS QUE: INFORMAR O NÚMERO DE CENAS, E A SUA COORDENADA INICIAL
//+ OU - ASSIM: new Sprite(3, 200, 300);
public Sprite(int numeroDeCenas, int x, int y){
cenas = new ImageIcon[numeroDeCenas];
this.x = x;
this.y = y;
}
//ESSE MÉTODO VAI ALTERNAR AS IMAGENS QUE COMPÕES NOSSA SPRITE
//DEPENDENDO DO QUE VC PRETENDER FAZER, ESSE MÉTODO PODERIA
//SER MAIS COMPLEXO!
//TIPO: animarCorrer() animarChutar() animarPular()
//E ESSES MÉTODOS SERIAM CHAMADOS AO CLICAR EM ALGUMA TECLA!!!
//ESSA ANIMAÇÃO VAI FICAR MUITO RÁPIDA, PQ ELE MUDAR A IMAGEM DA CENA
//A CADA 1/30 milissegundos
public void animar(){
cena += 1;
if(cena == cenas.length){ cena = 0; }
}
}
[/code]
mt obrigado