Tengo puesto el mapa,y luego tengo a mario bros que va hacia adelante,atras y salta.
Para saltar,si le das muchas veces a la flecha ,mario empieza ir para arriba sin parar.Luego aparte el movimiento de mario para andar no es muy fluido al darle a las flechas como que le cuesta moverse.
Lo que mas me interesa es como hacer un sleep o timer o algo parecido para que al saltar tengas que esperar X segundos para que vuelva a saltar.
Tambien quiero saber como dibujar unos rectangulos,y colocarlos en el mapa en el sitio que quiera ,y crear la colision .Como si mario se chocara con la pared,o con los objetos del mapa.
Aqui dejo todo mi codigo:
Juego.Java
Citar
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class Juego extends JFrame {
private JPanel contentPane;
private ZonaJuego zonaJuego;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Juego frame = new Juego();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Juego() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(200, 250, 1200, 500);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
zonaJuego=new ZonaJuego();
//zonaJuego.setBackground(Color.yellow);
zonaJuego.setBounds(-18,0,3350,460);//contentPane.getWidth(),
//contentPane.getHeight());
contentPane.add(zonaJuego);
zonaJuego.setFocusable(true);
zonaJuego.requestFocus();
}
}
import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class Juego extends JFrame {
private JPanel contentPane;
private ZonaJuego zonaJuego;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Juego frame = new Juego();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Juego() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(200, 250, 1200, 500);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
zonaJuego=new ZonaJuego();
//zonaJuego.setBackground(Color.yellow);
zonaJuego.setBounds(-18,0,3350,460);//contentPane.getWidth(),
//contentPane.getHeight());
contentPane.add(zonaJuego);
zonaJuego.setFocusable(true);
zonaJuego.requestFocus();
}
}
ZonaJuego.java
Citar
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.RenderingHints.Key;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.Timer;
public class ZonaJuego extends Canvas implements ActionListener{
//DATOS: CABALLO IMAGEN DE FONDO
private Image fondo;
private Mario mario;
private int cont,desp;
private int[] mov;
private Timer reloj;
private Image buffer;
private Graphics pantVirt;
//CONSTRUCTOR
ZonaJuego(){
fondo=new ImageIcon("./Imagenes2/MarioMapa.png").getImage();
mario=new Mario(this);
mov=new int[4];
for(int i=0;i<mov.length;i++){
mov=0;
}
desp=0;
cont=0;
//REGISTRAR EVENTOS
reloj=new Timer(40, this);
reloj.start();
this.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode()==KeyEvent.VK_LEFT){
mov[0]=0;
mario.setEstado(mario.PARADO);
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT){
mov[2]=0;
mario.setEstado(mario.PARADO);
}
if(e.getKeyCode()==KeyEvent.VK_UP){
mario.setEstado(mario.BAJANDO);
}
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode()==KeyEvent.VK_LEFT){
mov[0]=1;
mov[2]=0;
mario.setEstado(mario.ANDANDO);
if(mario.getPosX()<=500){
//desp=desp+mario.getVelocidad();
//mario.setEstado(mario.PARADO);
}
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT){
mov[0]=0;
mov[2]=1;
mario.setEstado(mario.ANDANDO);
if(mario.getPosX()>=400){
desp=desp-mario.getVelocidad();
mario.setEstado(mario.CORRIENDO);
}
}
if(e.getKeyCode()==KeyEvent.VK_UP){
mario.setEstado(mario.SUBIENDO);
if(mario.getPosX()>=400){
desp=desp-mario.getVelocidad();
//mario.setEstado(mario.PARADO);
//if(mario.getEstado()==Mario.PARADO ||
//mario.getEstado()==Mario.ANDANDO)
}
}
}
});
repaint();
}//FIN DEL CONSTRUCTOR
@Override
public void actionPerformed(ActionEvent e) {
mario.mover(mov);
mario.saltar();
repaint();
}
//MÉTODOS
@Override
public void update(Graphics g) {
// TODO Auto-generated method stub
//super.update(g);
buffer=createImage(getWidth(), getHeight());
pantVirt=buffer.getGraphics();
paint(pantVirt);
g.drawImage(buffer, 0, 0, getWidth(), getHeight(), null);
}
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);
//DIBUJAR EL FONDO
g.drawImage(fondo,desp-18,0,3350,460, null);
//DIBUJAR TODOS LOS OBJETOS QUE INTERVIENEN EN EL JUEGO
mario.dibujar(g);
}
}
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.RenderingHints.Key;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.Timer;
public class ZonaJuego extends Canvas implements ActionListener{
//DATOS: CABALLO IMAGEN DE FONDO
private Image fondo;
private Mario mario;
private int cont,desp;
private int[] mov;
private Timer reloj;
private Image buffer;
private Graphics pantVirt;
//CONSTRUCTOR
ZonaJuego(){
fondo=new ImageIcon("./Imagenes2/MarioMapa.png").getImage();
mario=new Mario(this);
mov=new int[4];
for(int i=0;i<mov.length;i++){
mov=0;
}
desp=0;
cont=0;
//REGISTRAR EVENTOS
reloj=new Timer(40, this);
reloj.start();
this.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode()==KeyEvent.VK_LEFT){
mov[0]=0;
mario.setEstado(mario.PARADO);
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT){
mov[2]=0;
mario.setEstado(mario.PARADO);
}
if(e.getKeyCode()==KeyEvent.VK_UP){
mario.setEstado(mario.BAJANDO);
}
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode()==KeyEvent.VK_LEFT){
mov[0]=1;
mov[2]=0;
mario.setEstado(mario.ANDANDO);
if(mario.getPosX()<=500){
//desp=desp+mario.getVelocidad();
//mario.setEstado(mario.PARADO);
}
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT){
mov[0]=0;
mov[2]=1;
mario.setEstado(mario.ANDANDO);
if(mario.getPosX()>=400){
desp=desp-mario.getVelocidad();
mario.setEstado(mario.CORRIENDO);
}
}
if(e.getKeyCode()==KeyEvent.VK_UP){
mario.setEstado(mario.SUBIENDO);
if(mario.getPosX()>=400){
desp=desp-mario.getVelocidad();
//mario.setEstado(mario.PARADO);
//if(mario.getEstado()==Mario.PARADO ||
//mario.getEstado()==Mario.ANDANDO)
}
}
}
});
repaint();
}//FIN DEL CONSTRUCTOR
@Override
public void actionPerformed(ActionEvent e) {
mario.mover(mov);
mario.saltar();
repaint();
}
//MÉTODOS
@Override
public void update(Graphics g) {
// TODO Auto-generated method stub
//super.update(g);
buffer=createImage(getWidth(), getHeight());
pantVirt=buffer.getGraphics();
paint(pantVirt);
g.drawImage(buffer, 0, 0, getWidth(), getHeight(), null);
}
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);
//DIBUJAR EL FONDO
g.drawImage(fondo,desp-18,0,3350,460, null);
//DIBUJAR TODOS LOS OBJETOS QUE INTERVIENEN EN EL JUEGO
mario.dibujar(g);
}
}
y por ultimo Mario.java
Citar
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Paint;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
public class Mario {
//CONSTANTES
public static final int PARADO=0;
public static final int ANDANDO=1;
public static final int CORRIENDO=2;
public static final int SUBIENDO=3;
public static final int BAJANDO=4;
public static final int IZQ=-1;
public static final int DCHA=1;
//DATOS
private int posX,posY,possX;
private int ancho, alto;
private int dirH, dirV, velocidad,velocidad1;
private int estado, imgActual;
private ImageIcon[] imgI;
private ImageIcon[] imgD;
private ZonaJuego zonaJuego;
//GETTERS Y SETTERS
public int getPosX() {
return posX;
}
public int getPossX() {
return possX;
}
public void setPosX(int posX) {
this.posX = posX;
}
public int getPosY() {
return posY;
}
public void setPosY(int posY) {
this.posY = posY;
}
public int getAncho() {
return ancho;
}
public void setAncho(int ancho) {
this.ancho = ancho;
}
public int getAlto() {
return alto;
}
public void setAlto(int alto) {
this.alto = alto;
}
public int getDirH() {
return dirH;
}
public void setDirH(int dirH) {
this.dirH = dirH;
}
public int getDirV() {
return dirV;
}
public void setDirV(int dirV) {
this.dirV = dirV;
}
public int getVelocidad() {
return velocidad;
}
public int getVelocidad1() {
return velocidad1;
}
public void setVelocidad(int velocidad) {
this.velocidad = velocidad;
}
public int getEstado() {
return estado;
}
public void setEstado(int estado) {
this.estado = estado;
}
public int getImgActual() {
return imgActual;
}
public void setImgActual(int imgActual) {
this.imgActual = imgActual;
}
//CONSTRUCTOR
Mario(ZonaJuego zonaJuego){
this.zonaJuego=zonaJuego;
ancho=20;
alto=40;
posX=50;
posY=400;
imgActual=0;
velocidad=3;
velocidad1=1;
possX=800;
dirH=DCHA;
dirV=0;
estado=PARADO;
imgI=new ImageIcon[8];
imgD=new ImageIcon[8];
for(int i=0;i<imgI.length;i++){
imgI=new ImageIcon("./Imagenes2/Mario/Mario"+(i+1)+".png");
imgD=new ImageIcon("./Imagenes2/Mario/MarioD"+(i+1)+".png");
}
}
//MÉTODOS
public void dibujar(Graphics g){
if(dirH==IZQ){
g.drawImage(imgI[imgActual].getImage(),
posX, posY, ancho, alto, zonaJuego);
}
if(dirH==DCHA){
g.drawImage(imgD[imgActual].getImage(),
posX, posY, ancho, alto, zonaJuego);
}
}
public void mover(int[] mov){
//cambiar de direccion sin moverse
if(dirH==IZQ && mov[2]==1){
dirH=DCHA;
imgActual=0;
}
else if(dirH==DCHA && mov[0]==1){
dirH=IZQ;
imgActual=0;
}
else{
if(estado!=PARADO && estado!=CORRIENDO){
//CAMBIAR POSICION
posX=posX+velocidad*dirH;
if(posX<0){
posX=0;
}
if(posX+ancho>zonaJuego.getWidth()){
posX=zonaJuego.getWidth()-ancho;
}
//CAMBIAR IMAGEN
imgActual=(imgActual+1)%imgI.length;
}
if(estado==CORRIENDO){
imgActual=(imgActual+1)%imgI.length;
}
}
}
public void saltar(){
//SI ESTA PARADO: SALTA EN VERTICAL
if(estado==SUBIENDO){
posY=posY-8;
}
if(estado==BAJANDO){
posY=posY+8;
if(posY>=400){
estado=PARADO;
}
}
}
}
import java.awt.Image;
import java.awt.Paint;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
public class Mario {
//CONSTANTES
public static final int PARADO=0;
public static final int ANDANDO=1;
public static final int CORRIENDO=2;
public static final int SUBIENDO=3;
public static final int BAJANDO=4;
public static final int IZQ=-1;
public static final int DCHA=1;
//DATOS
private int posX,posY,possX;
private int ancho, alto;
private int dirH, dirV, velocidad,velocidad1;
private int estado, imgActual;
private ImageIcon[] imgI;
private ImageIcon[] imgD;
private ZonaJuego zonaJuego;
//GETTERS Y SETTERS
public int getPosX() {
return posX;
}
public int getPossX() {
return possX;
}
public void setPosX(int posX) {
this.posX = posX;
}
public int getPosY() {
return posY;
}
public void setPosY(int posY) {
this.posY = posY;
}
public int getAncho() {
return ancho;
}
public void setAncho(int ancho) {
this.ancho = ancho;
}
public int getAlto() {
return alto;
}
public void setAlto(int alto) {
this.alto = alto;
}
public int getDirH() {
return dirH;
}
public void setDirH(int dirH) {
this.dirH = dirH;
}
public int getDirV() {
return dirV;
}
public void setDirV(int dirV) {
this.dirV = dirV;
}
public int getVelocidad() {
return velocidad;
}
public int getVelocidad1() {
return velocidad1;
}
public void setVelocidad(int velocidad) {
this.velocidad = velocidad;
}
public int getEstado() {
return estado;
}
public void setEstado(int estado) {
this.estado = estado;
}
public int getImgActual() {
return imgActual;
}
public void setImgActual(int imgActual) {
this.imgActual = imgActual;
}
//CONSTRUCTOR
Mario(ZonaJuego zonaJuego){
this.zonaJuego=zonaJuego;
ancho=20;
alto=40;
posX=50;
posY=400;
imgActual=0;
velocidad=3;
velocidad1=1;
possX=800;
dirH=DCHA;
dirV=0;
estado=PARADO;
imgI=new ImageIcon[8];
imgD=new ImageIcon[8];
for(int i=0;i<imgI.length;i++){
imgI=new ImageIcon("./Imagenes2/Mario/Mario"+(i+1)+".png");
imgD=new ImageIcon("./Imagenes2/Mario/MarioD"+(i+1)+".png");
}
}
//MÉTODOS
public void dibujar(Graphics g){
if(dirH==IZQ){
g.drawImage(imgI[imgActual].getImage(),
posX, posY, ancho, alto, zonaJuego);
}
if(dirH==DCHA){
g.drawImage(imgD[imgActual].getImage(),
posX, posY, ancho, alto, zonaJuego);
}
}
public void mover(int[] mov){
//cambiar de direccion sin moverse
if(dirH==IZQ && mov[2]==1){
dirH=DCHA;
imgActual=0;
}
else if(dirH==DCHA && mov[0]==1){
dirH=IZQ;
imgActual=0;
}
else{
if(estado!=PARADO && estado!=CORRIENDO){
//CAMBIAR POSICION
posX=posX+velocidad*dirH;
if(posX<0){
posX=0;
}
if(posX+ancho>zonaJuego.getWidth()){
posX=zonaJuego.getWidth()-ancho;
}
//CAMBIAR IMAGEN
imgActual=(imgActual+1)%imgI.length;
}
if(estado==CORRIENDO){
imgActual=(imgActual+1)%imgI.length;
}
}
}
public void saltar(){
//SI ESTA PARADO: SALTA EN VERTICAL
if(estado==SUBIENDO){
posY=posY-8;
}
if(estado==BAJANDO){
posY=posY+8;
if(posY>=400){
estado=PARADO;
}
}
}
}