elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Java juego 2D
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Java juego 2D  (Leído 1,971 veces)
aspiazu

Desconectado Desconectado

Mensajes: 58


Ver Perfil
Java juego 2D
« 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;
         }
      }
   }
      
      
}



En línea

+ 1 Oculto(s)

Desconectado Desconectado

Mensajes: 298


un defecto se puede convertir en una virtud


Ver Perfil WWW
Re: Java juego 2D
« Respuesta #1 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
  1. public int colisionCirculoCuadrado(Circulo circle, Cuadrado rect) {
  2.  
  3.        int circleDistanceX = Math.abs(circle.x - rect.getPostX() - rect.getBase() / 2);
  4.        int circleDistanceY = Math.abs(circle.y - rect.getPostY() - rect.getAltura() / 2);
  5.  
  6.        if (circleDistanceX > (rect.getBase() / 2 + circle.r)) {
  7.            return 1;
  8.        }
  9.        if (circleDistanceY > (rect.getAltura() / 2 + circle.r)) {
  10.            return 2;
  11.        }
  12.        if (circleDistanceX <= (rect.getBase() / 2)) {
  13.            return 3;
  14.        }
  15.        if (circleDistanceY <= (rect.getAltura() / 2)) {
  16.            return 4;
  17.        }
  18.        double cornerDistance_sq = Math.pow(circleDistanceX - rect.getBase() / 2, 2) + Math.pow(circleDistanceY - rect.getAltura() / 2, 2);
  19.        if ((cornerDistance_sq <= (Math.pow(circle.r, 2)))) {
  20.            return 4;
  21.        }
  22.        return -1;
  23.    }

el codigo de arriba es de mi autoria sobre un juego que hice uno de estos dias lo subire a la nube


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con juego hechos en java
Java
aNgElUz 1 6,133 Último mensaje 6 Junio 2006, 15:59 pm
por whaky
juego java hacer trampa
Java
softdates 2 3,887 Último mensaje 2 Julio 2008, 22:03 pm
por sapito169
Mi juego de naves en Java « 1 2 »
Java
Pakiyopgd 17 18,258 Último mensaje 26 Enero 2010, 22:52 pm
por Pakiyopgd
Juego ejercicios #2 [Java] « 1 2 3 4 5 »
Ejercicios
Amerikano|Cls 47 44,859 Último mensaje 20 Abril 2011, 09:20 am
por AleX Inc.
Juego tipo Saw en Java
Java
alvarillolag 7 3,371 Último mensaje 26 Octubre 2015, 01:16 am
por Jety
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines