Animação de sprites

7 respostas
G

Olá! Gostaria de saber como faço meu personagem correr, por exemplo, quando o cara apertar para a direita, vai parecer que o boneco está correndo.

Tenho 3 imagens, que são a evolução da corrida do personagem. Gostaria de saber, como fazer ele parecer estar correndo.

Atenciosamente, Gustavo.

7 Respostas

Marky.Vasconcelos

Mude as imagens em loop enquanto isso mova o eixo na direção que voce quer.

Mas tudo aos poucos. Quantos mais frames tiver melhor a animação, quanto mais pontos por segundo melhor a sensação de movimento.

ViniGodoy

Dá uma lida nos tutoriais de Java do meu site, do primeiro até o último.

Marky.Vasconcelos

Ahh é… esqueci de posta o link do Vini

http://www.pontov.com.br/site/index.php?option=com_content&view=category&id=48:java2d&Itemid=58&layout=default

Ai voce vai descobrir como fazer isso.

G

Eu achei muito complicado o tutorial, é que sou iniciante, sabe?
Eu fiz um codigo bem básico, ele trava um pouco, mas quebra um galho:

public void keyPressed(KeyEvent e) {
        switch (e.getKeyCode()) {
            case KeyEvent.VK_RIGHT:
            if(animStep == 0) { animStep = 1; }
            else if(animStep == 1) { animStep = 2; }
            else if(animStep == 2) { animStep = 0; }
            x += 3;
        }
        loadImages();
        repaint();
        wait(20);
}

void loadImages() {
        try {
            imgFundo = ImageIO.read(new URL(getClass().getResource("images\\bg.jpg"), "images\\bg.jpg"));

            if(animStep == 0) player = ImageIO.read(new URL(getClass().getResource("images\\stand-right.gif"), "images\\stand-right.gif"));
            else if(animStep == 1) player = ImageIO.read(new URL(getClass().getResource("images\\run-right1.gif"), "images\\run-right1.gif"));
            else if(animStep == 2) player = ImageIO.read(new URL(getClass().getResource("images\\run-right2.gif"), "images\\stand-right2.gif"));
        } catch(Exception e) { }
    }

    @Override
    public void paintComponent(Graphics g) {
        try {
            Graphics2D g2d = (Graphics2D) g.create();
            g2d.drawImage(imgFundo, 0, 0, this.getWidth(), this.getHeight(), this);
            g2d.drawImage(player, x, 190, this);
            g2d.dispose();
        } catch(Exception e) { }
    }

O que vocês acharam?

Marky.Vasconcelos

Voce carrega todo momento as imagens, voce devia fazer isso apenas uma vez.

E talvez.

if(animStep == 0) { animStep = 1; }   
            else if(animStep == 1) { animStep = 2; }   
            else if(animStep == 2) { animStep = 0; }

Possa ser apenas

if(animStep == 2) animStep = 0;
else animStep++;

Mesmo assim fazer isso com if/elses não é legal.

E ainda falta no começo do método paintComponent
o comando super.paintComponent(g);

ViniGodoy

Por que você cria um new URL? No lugar de:

Você pode simplesmente fazer:

ViniGodoy

Se você achou os tutoriais complicados, recomendo fortemente que você estude os fundamentos básicos da linguagem, antes de continuar.
Vi que você abriu um tópico também de sockets, que também é um conteúdo mais avançado.

Solidifique primeiro seu conhecimento no básico, antes de tentar dar vôos mais altos (vc pode, por exemplo, começar com jogos mais simples).

Criado 16 de março de 2010
Ultima resposta 17 de mar. de 2010
Respostas 7
Participantes 3