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]
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


0