Título: Java juego 2D Publicado por: aspiazu en 26 Abril 2016, 18:35 pm Buuuenas,ando haciendo un juego en 2d de java ,una especie de mario bross.
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(); } } 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); } } 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; } } } } Título: Re: Java juego 2D Publicado por: + 1 Oculto(s) en 27 Abril 2016, 19:24 pm investiga sobre hilos pero ten cuidado con los puntos criticos
tambien se puede hacer sin hilos claro esta... ahora deberias hacer colisiones de circulo con rectangulo algo asi: Código
el codigo de arriba es de mi autoria sobre un juego que hice uno de estos dias lo subire a la nube |