Java - Java cambio de imágenes

 
Vista:

Java cambio de imágenes

Publicado por Rodrigo (1 intervención) el 05/07/2012 10:20:42
Hola ! Buenas noches. Introducción rápida, soy un estudiante de segundo año de informática en Inacap, Chile. Tuvimos unas clases de Java donde veíamos lo básico como hacer una ventana, imprimir por pantalla y una breve intro, me gustó tanto que comencé a leer y a aprender varias cosas y me nació hacer un juego, raro pero quería intentarlo.

Esto fue lo que obtuve, no es gran cosa solo es un minuto.
http://www.youtube.com/watch?v=jjik7XGUro4&feature=plcp

Ahora estoy haciendo algo similar aquí una imagen
http://25.media.tumblr.com/tumblr_m6ohn43Pvw1r69dbso1_500.png

El problema es el intercambio de imágenes que no se muy bien como funciona. Lo que sí es que cuando uno aprieta una tecla realiza un movimiento, pero dado que la tecla de movimiento (flechas izquierda, derecha, arriba, abajo) se mantienen presionadas, la imagen no termina de ejecutarse por completo y nuevamente muestra el movimiento 1, por eso cuando se presiona una tecla solo se ve "levantando un pié", no se si me entienden o me expliqué bien.

De todas maneras aquí pongo el código.


import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Timer.*;


public class base {
final JLabel fondo = new JLabel(""); // fondo
final JFrame equisde = new JFrame("Kotaro"); // nombre que tendra la ventana
final JLabel personaje = new JLabel(""); // personaje
final JLabel PosicionX = new JLabel("");
final JLabel PosicionY = new JLabel("");

int MXX=100, MXY=100;
int x=0, y=0;
mymain juan = new mymain();

public base(){

final JDesktopPane panel = new JDesktopPane();
fondo.setBounds(0, 0, 800, 640); // posicion y tamaño de la imagen
fondo.setIcon(new ImageIcon("images/fondos/fondo.jpg"));

//personaje
personaje.setBounds(MXX, MXY, 21, 28);
personaje.setIcon(new ImageIcon("images/character/main/d2.png"));
// Posicion
PosicionX.setBounds(700, 530, 30, 10);
PosicionX.setVisible(true);
PosicionY.setBounds(731, 530, 30, 10);
PosicionY.setVisible(true);
//add

panel.add(PosicionX);
panel.add(PosicionY);
panel.add(personaje);
panel.add(fondo);

equisde.add(panel); //escritorio
equisde.setSize(800,600); // tamaño del frame
equisde.setLocationRelativeTo(null); // centrar frame
equisde.setVisible(true); // ventana visible
equisde.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);; // terminar al cerrar


}
Timer movP1 = new Timer (200, new ActionListener ()
{
public void actionPerformed(ActionEvent e)
{
switch(x){
case 1:
switch(y){
case 1:
personaje.setIcon(new ImageIcon("images/character/main/u1.png"));
y=2;
break;
case 2:
personaje.setIcon(new ImageIcon("images/character/main/u2.png"));
y=3;
break;
case 3:
personaje.setIcon(new ImageIcon("images/character/main/u3.png"));
y=4;
break;
case 4:
personaje.setIcon(new ImageIcon("images/character/main/u2.png"));
y=0;
break;
}
break;
case 2:
switch(y){
case 1:
personaje.setIcon(new ImageIcon("images/character/main/l1.png"));
y=2;
break;
case 2:
personaje.setIcon(new ImageIcon("images/character/main/l2.png"));
y=3;
break;
case 3:
personaje.setIcon(new ImageIcon("images/character/main/l3.png"));
y=4;
break;
case 4:
personaje.setIcon(new ImageIcon("images/character/main/l2.png"));
y=0;
break;
}
break;
case 3:
switch(y){
case 1:
personaje.setIcon(new ImageIcon("images/character/main/r1.png"));
y=2;
break;
case 2:
personaje.setIcon(new ImageIcon("images/character/main/r2.png"));
y=3;
break;
case 3:
personaje.setIcon(new ImageIcon("images/character/main/r3.png"));
y=4;
break;
case 4:
personaje.setIcon(new ImageIcon("images/character/main/r2.png"));
y=0;
break;
}
break;
case 4:
switch(y){
case 1:
personaje.setIcon(new ImageIcon("images/character/main/d1.png"));
y=2;
break;
case 2:
personaje.setIcon(new ImageIcon("images/character/main/d2.png"));
y=3;
break;
case 3:
personaje.setIcon(new ImageIcon("images/character/main/d3.png"));
y=4;
break;
case 4:
personaje.setIcon(new ImageIcon("images/character/main/d2.png"));
y=0;
break;
}
break;

}

}
});

void movimiento(){
equisde.addKeyListener(new KeyListener(){
public void keyPressed(KeyEvent e) {
actualiza(e.getKeyCode(), true);
}
public void keyReleased(KeyEvent e) {
actualiza(e.getKeyCode(), true);
}
private void actualiza(int keyCode, boolean pressed) {
switch (keyCode) {
case KeyEvent.VK_UP:
cambiodeimagenes(x=1);
break;
case KeyEvent.VK_DOWN:
cambiodeimagenes(x=4);
break;
case KeyEvent.VK_LEFT:
cambiodeimagenes(x=2);
break;
case KeyEvent.VK_RIGHT:
cambiodeimagenes(x=3);
break;
case KeyEvent.VK_SPACE:
JOptionPane.showMessageDialog(null, "espacio");
break;
case KeyEvent.VK_CONTROL:
JOptionPane.showMessageDialog(null, "control");
break;
case KeyEvent.VK_ALT:
JOptionPane.showMessageDialog(null, "alterar");
break;
case KeyEvent.VK_F1:
JOptionPane.showMessageDialog(null, "F1");
break;
}
}
public void keyTyped(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
});//fin add keys

}

void cambiodeimagenes(int x){

MXX=juan.movimientoX(MXX, x);
MXY=juan.movimientoY(MXY, x);
PosicionX.setText(MXX+"");
PosicionY.setText(MXY+"");
personaje.setBounds(MXX, MXY, 21, 28);
y=1;
movP1.start();


}

}


Disculpen el desorden
Muchas gracias y espero puedan ayudarme
[email protected]
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Java cambio de imágenes

Publicado por Neuroxis (1 intervención) el 09/01/2014 09:46:57
Usa un contador en el metodo paint,y si xa(velocidad en eje x) x ejemplo, es mayor que 0 haces
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
si(xa > 0)
     si(cont < 10)
            pintar imagen1
     sino
         si(cont < 20)
              pintar imagen 2
          sino
                   si(cont < 30)
                       pintar imagen3
                   sino
                      si(cont <40)
                          pintar imagen4
                      sino
                            cont=0;
cont++;
//fin de si xa >0
todo estoo dentro del metodo paint de la clase personaje
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar