Banda Ancha EU

Comunidad de usuarios
de fibra, móvil y ADSL

hosting en interdominios
1.446 lecturas y 4 respuestas
  • Boca de Pez Boca de Pez
    6

    juego misiles en java-misiles del arraylist no se mueven

    Estoy empezando en programación y he querido hacer un juego de naves que lanzan misiles. Bueno la imagen del misil está hecha con BufferedImage pero para no tener que hacer un montón de misiles uno a uno he hecho un ArrayList y sí salen los misiles pero no se mueven.

    El primer misil sí se dispara pero el resto no.

    Si no les parece mal voy a poner el código de las dos clases involucradas haber si alguien puede darme alguna indicación. Creo que estoy cerca pero no doy con el fallo. Bueno aquí está el código de las clases:

    clase misiles:

    public class misiles implements KeyListener{

    BufferedImage proyectil;

    nave n;

    Asteroids a;

    ArrayList misil;

    public int x=n.x;

    int xa=1;

    public int y=n.y;

    int ya=1;

    voyager v;

    Sound sound;

    misiles(Asteroids a){

    loadImage();

    misil=new ArrayList();

    this.a=a;

    }

    public void loadImage(){

    try{

    proyectil=ImageIO.read(getClass().getClassLoader().getResource("imagenes/misilR.jpg"));

    }catch(Exception e){

    System.out.println("ERROR: No puedo cargar los misiles");

    }

    }

    public void paintComponent(Graphics g){

    g.drawImage(proyectil, x, y, a);

    }

    public void move(){

    if(((x+xa)>0)&&(x+xa)

    if(((y+ya)>0&&(y+ya)

    x=x+xa;

    y=y+ya;

    }

    }

    }

    @Override

    public void keyTyped(KeyEvent e) {

    // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.

    }

    @Override

    public void keyPressed(KeyEvent e) {

    //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.

    if(e.getKeyCode()==KeyEvent.VK_SPACE){

    xa=8;

    sound.disparo.play();

    }

    if(e.getKeyCode()==KeyEvent.VK_Z){

    a.obtenerMisil().add(new misiles(a));

    }

    }

    @Override

    public void keyReleased(KeyEvent e) {

    // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.

    }

    public Rectangle getBounds(){

    return new Rectangle(x,y,5,1);

    }

    }

    clase Asteroids:public class Asteroids extends JPanel{ JFrame frame; rocas r=new rocas(this); nave n=new nave(this); voyager v=new voyager(this); misiles m; ArrayList explosion; ArrayList misil; BufferedImage superexplosion; explosiones ex; Asteroids a; int score=0; public int x; public int xa=1; public int y; public int ya=1; Asteroids(){ misil=new ArrayList(); setSize(1300,850); cargarExplosion(); explosion=new ArrayList(); //si no lo ponemos da error NullPointerException m=new misiles(this); addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { }
    @Override public void keyPressed(KeyEvent e) { n.keyPressed(e); m.keyPressed(e); }
    @Override public void keyReleased(KeyEvent e) { n.keyReleased(e); } });{ setFocusable(true); Sound.marcha.loop(); } } public int score(){ return score; }public void paintComponent(Graphics g){ super.paintComponents(g); g.setColor(Color.BLACK); g.fillRect(0, 0, 1300, 850); r.paintComponent(g); n.paintComponent(g); m.paintComponent(g); v.paintComponent(g); dibujarExplosion(g); dibujarMisil(g); g.setColor(Color.GREEN); g.setFont(new Font("Verdana",Font.BOLD,39)); g.drawString("Naves destruidas: "+String.valueOf(score()),10,30); if(v.collision()){ g.setColor(Color.RED); g.setFont(new Font("Verdana",Font.BOLD,28)); g.drawString("Coordenadas X: "+String.valueOf(v.x),10,50); g.drawString("Coordenadas Y: "+String.valueOf(v.y),10,75); }
    } public static void main(String[] args) throws InterruptedException { // TODO code application logic here JFrame frame=new JFrame(); Asteroids a=new Asteroids(); frame.add(a); frame.setTitle("Asteroids"); frame.setSize(1300,850); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setResizable(false); frame.setVisible(true); while(true){ a.move(); a.repaint(); Thread.sleep(15); } } public void move(){ r.move(); n.move(); m.move(); v.move(); } public ArrayList obtenerE(){ return explosion; } public void cargarExplosion(){ try{ superexplosion=ImageIO.read(getClass().getClassLoader().getResource("imagenes/particle_largeBall1.png")); }catch(Exception e){ System.out.println("No pude cargar explosion"); } } public void dibujarExplosion(Graphics g){ if(obtenerE().size()!=0){ ArrayList aux=obtenerE(); for(int i=0;i
    public void dibujarMisil(Graphics g){ if(obtenerMisil().size()!=0){ ArrayList aux=obtenerMisil(); for(int i=0;i
    }
    Bueno, pues eso, un saludo y gracias.

    Este tema lleva más de 6 meses inactivo. Es recomendable que abras un nuevo tema para retomar la conversación.
    • Boca de Pez Boca de Pez
      6

      perdón, la clase Asteroids salió mal, aquí está de nuevo:…

      perdón, la clase Asteroids salió mal, aquí está de nuevo:

      public class Asteroids extends JPanel{

      JFrame frame;

      rocas r=new rocas(this);

      nave n=new nave(this);

      voyager v=new voyager(this);

      misiles m;

      ArrayList explosion;

      ArrayList misil;

      BufferedImage superexplosion;

      explosiones ex;

      Asteroids a;

      int score=0;

      public int x;

      public int xa=1;

      public int y;

      public int ya=1;

      Asteroids(){

      misil=new ArrayList();

      setSize(1300,850);

      cargarExplosion();

      explosion=new ArrayList(); //si no lo ponemos da error NullPointerException

      m=new misiles(this);

      addKeyListener(new KeyListener() {

      @Override

      public void keyTyped(KeyEvent e) {

      }

      @Override

      public void keyPressed(KeyEvent e) {

      n.keyPressed(e);

      m.keyPressed(e);

      }

      @Override

      public void keyReleased(KeyEvent e) {

      n.keyReleased(e);

      }

      });{

      setFocusable(true);

      Sound.marcha.loop();

      }

      }

      public int score(){

      return score;

      }

      public void paintComponent(Graphics g){

      super.paintComponents(g);

      g.setColor(Color.BLACK);

      g.fillRect(0, 0, 1300, 850);

      r.paintComponent(g);

      n.paintComponent(g);

      m.paintComponent(g);

      v.paintComponent(g);

      dibujarExplosion(g);

      dibujarMisil(g);

      g.setColor(Color.GREEN);

      g.setFont(new Font("Verdana",Font.BOLD,39));

      g.drawString("Naves destruidas: "+String.valueOf(score()),10,30);

      if(v.collision()){

      g.setColor(Color.RED);

      g.setFont(new Font("Verdana",Font.BOLD,28));

      g.drawString("Coordenadas X: "+String.valueOf(v.x),10,50);

      g.drawString("Coordenadas Y: "+String.valueOf(v.y),10,75);

      }

      }

      public static void main(String[] args) throws InterruptedException {

      // TODO code application logic here

      JFrame frame=new JFrame();

      Asteroids a=new Asteroids();

      frame.add(a);

      frame.setTitle("Asteroids");

      frame.setSize(1300,850);

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      frame.setLocationRelativeTo(null);

      frame.setResizable(false);

      frame.setVisible(true);

      while(true){

      a.move();

      a.repaint();

      Thread.sleep(15);

      }

      }

      public void move(){

      r.move();

      n.move();

      m.move();

      v.move();

      }

      public ArrayList obtenerE(){

      return explosion;

      }

      public void cargarExplosion(){

      try{

      superexplosion=ImageIO.read(getClass().getClassLoader().getResource("imagenes/particle_largeBall1.png"));

      }catch(Exception e){

      System.out.println("No pude cargar explosion");

      }

      }

      public void dibujarExplosion(Graphics g){

      if(obtenerE().size()!=0){

      ArrayList aux=obtenerE();

      for(int i=0;i

      ex=(explosiones)aux.get(i);

      g.drawImage(superexplosion, 650, ex.y, 650+1100, ex.y+1100, ex.obtenerCuadro()*40,0, ex.obtenerCuadro()*40+1100, 400, null);

      //ojo poner en el constructor explosion=new ArrayList() si no da error NullPointerException

      m.proyectil=null;//elimino el misil

      }

      }

      }

      public ArrayList obtenerMisil(){

      return misil;

      }

      public void dibujarMisil(Graphics g){

      if(obtenerMisil().size()!=0){

      ArrayList aux=obtenerMisil();

      for(int i=0;i

      misiles m=(misiles)aux.get(i);

      g.drawImage(m.proyectil, m.x, m.y,a);

      }

      }

      }

      }

      • Boca de Pez Boca de Pez
        6

        Hola gracias por responder. Sí:…

        Hola gracias por responder.

        Sí:

        if(e.getKeyCode()==KeyEvent.VK_Z){

        a.obtenerMisil().add(new misiles(a));

        }

        esto lo hago para que cada vez que pulso la letra Z me añada un nuevo misil del arraylist. Efectivamente lo hace pero se queda parado sin más cuando aprieto tecla espacio debería salir disparado ya que allí tengo el metodo abstracto de la interfaz KeyListener:

        if(e.getKeyCode()==KeyEvent.VK_SPACE){

        xa=8;

        sound.disparo.play();

        }

        Sólo funciona el primer misil, los demás aparecen pero quedan parados. Deberían salir a velocidad 8 y sonar ruido de disparo, el ruido suena pero los misiles se quedan parados.

        saludos