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.