Grazie andbin, grazie ai tuoi esempi sono riuscito ad effettuare il lancio del missile. Mi rimane un piccolo problema e cioè che ogni volta che lancio un missile nuovo mi aumenta la sua velocità in quanto (credo) il Timer aggiunge la velocità a quella esistente. Come posso fare per risolvere questo problema???
Per maggiori info pongo il listato con anche l'immagine del Missile e dell'Astronave per testare l'esempio.
codice:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.List;
import javax.swing.*;
import javax.swing.Timer;
public class AstronaveTest
{
public static void main(String[]args)
{
Finestra finestra = new Finestra();
finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
finestra.setVisible(true);
}
}
class Finestra extends JFrame
{
public static final int LARGHEZZA = 800;
public static final int ALTEZZA = 600;
public Finestra()
{
setSize(LARGHEZZA,ALTEZZA);
setResizable(false);
Container contenitore = this.getContentPane();
Pannello pannello = new Pannello();
contenitore.add(pannello);
}
}
class Pannello extends JPanel
{
private Astronave astronave;
private int xx;
private int yy;
private Image imgAstronave;
private List<Missile>missiliList;
public Pannello()
{
AzioniTasti AT = new AzioniTasti();
addKeyListener(AT);
//setto le variabili per la posizione iniziale dell'astronave
xx = 400;
yy = 500;
astronave = new Astronave();
imgAstronave = astronave.getImmagineAstronave();
missiliList= new ArrayList<Missile>();
}
public boolean isFocusable()
{
return true;
}
public void spostaAstronave(int x, int y)
{
xx = xx + x;
yy = yy + y;
}
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.drawImage(imgAstronave,xx,yy,null);
for(Missile m : missiliList)
{
m.draw(g2d);
}
}
private void moveM() {
for (Missile m : missiliList) {
m.move(-20);
}
repaint();
}
private class AzioniTasti implements KeyListener
{
public final int velocità = 80;
private Timer timer;
private int avanzamento;
public AzioniTasti()
{
avanzamento = 4;
}
public void keyPressed(KeyEvent event)
{
int keyCode = event.getKeyCode();
if (keyCode == KeyEvent.VK_LEFT)
{
spostaAstronave(-avanzamento,0);
repaint();
}
else if (keyCode == KeyEvent.VK_RIGHT)
{
spostaAstronave(avanzamento,0);
repaint();
}
else if (keyCode == KeyEvent.VK_Z)
{
missiliList.add(new Missile(xx,yy));
timer = new Timer(velocità, new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
moveM();
}
});
timer.start();
}
}
public void keyReleased(KeyEvent event)
{
}
public void keyTyped(KeyEvent event)
{
}
}
}
class Missile
{
private int xM;
private int yM;
private Image missile;
public Missile(int xxx, int yyy)
{
this.xM=xxx;
this.yM=yyy;
Toolkit kit = Toolkit.getDefaultToolkit();
missile = kit.getImage("missile1.gif");
}
public Image getMissile()
{
return missile;
}
public int getXX()
{
return xM;
}
public int getYY()
{
return yM;
}
public void draw(Graphics2D g2d)
{
g2d.drawImage(missile,xM,yM,null);
}
public void move(int yyy)
{
yM = yM + yyy;
}
}
class Astronave
{
private Image immagineAstronave;
public Astronave()
{
Toolkit kit = Toolkit.getDefaultToolkit();
immagineAstronave = kit.getImage("navicella.gif");
}
public Image getImmagineAstronave()
{
return immagineAstronave;
}
}
Ecco le immagini del missile e della navicella