|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Feb 2005
Messaggi: 127
|
[JAVA] striscie impazzite :(
salve a tutti, mi servirebbe una mano. In quest'applet invece di creare un animazione di punti che si muovono in direzioni casuali, mi crea delle striscie....
sto impazzendo AIUTO ![]()
__________________
the AUSTRALOPITECI |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Feb 2005
Messaggi: 127
|
Mi sono dimenticato il codice...sono impazzito
![]() import java.applet.Applet; import java.awt.*; import java.awt.event.*; import javax.swing.Timer; import java.util.Random; import javax.swing.*; import java.util.ArrayList; public class CatchForms extends JApplet { private final int AMPIEZZA_CAS = 10; /*altezza dell'applet*/ private final int ALTEZZA = 400; /*larghezza dell'applet*/ private final int LARGHEZZA = 400; /*ritardo impostato nel clock*/ private final int DELAY = 500; /*direzioni consentite*/ private final int NORD = 0; private final int NORD_EST = 1; private final int EST = 2; private final int SUD_EST = 3; private final int SUD = 4; private final int SUD_OVEST = 5; private final int OVEST = 6; private final int NORD_OVEST = 7; /*flag per far partire il gioco*/ private boolean inizioFlag; /*numero di forme presenti nell applet*/ private int NUMERO_FORME; //timer che verrà usato per generare il movimento private Timer timerAnimazione; /*array in cui ad ogni indice corrisponde una forma*/ private int[] direzione; private ArrayList<Point> oggetti; /** * Richiamato dal browser o dall'appletviewer per informare il JApplet che * è stato caricato nel sistema. E' sempre richiamato prima che il metodo * start sia richiamato per la prima volta. */ public void init() { /*imposta la dimensiona dell'applet*/ setSize(ALTEZZA, LARGHEZZA); /*imposta il colore dello sfondo*/ setBackground(Color.black); /*crea un generatore di numeri casuali*/ Random genera = new Random(); /*imposta la flag per la partenza del gioco a false*/ inizioFlag = false; /*crea un oggetto di tipo Timer*/ timerAnimazione = new Timer (DELAY, new AnimationActionListener() ); /*fai partire il timer*/ timerAnimazione.start(); NUMERO_FORME = 4; direzione = new int[NUMERO_FORME]; oggetti = new ArrayList<Point> (); /*crea un ascoltatore di eventi del mouse*/ addMouseListener (new inizioMouseListener () ); /*inizializza le posizioni di ogni forma all'avvio dell'applet*/ for ( int i = 0; i < NUMERO_FORME; i++) { oggetti.add (new Point( (10 + i) * AMPIEZZA_CAS, (10 + i) * AMPIEZZA_CAS) ); direzione[i] = Math.abs(genera.nextInt()) % 8; } } /** * metodo paint dell'applet. * disegna le figure geometriche nella loro posizione attuale * @param page l'oggetto Graphics per questo applet */ public void paint(Graphics page) { if (inizioFlag == true){ int xAux,yAux; Point puntoAux; for ( int i = 0; i < oggetti.size (); i++) { puntoAux = (Point)oggetti.get (i); xAux = (int) puntoAux.getX (); yAux = (int) puntoAux.getY (); page.setColor(Color.red); page.fillRect(xAux,yAux,10, 10); } } } /** * metodo paint dell'applet. * disegna le figure geometriche nella loro posizione attuale * @param page l'oggetto Graphics per questo applet */ private class inizioMouseListener implements MouseListener { public void mouseEntered (MouseEvent event) { inizioFlag = true; repaint (); } public void mousePressed (MouseEvent event) {}; public void mouseClicked (MouseEvent event) {}; public void mouseReleased (MouseEvent event) {}; public void mouseExited (MouseEvent event) {}; } /** *classe interna utilizzata per creare l'animazione del movimento delle *form */ private class AnimationActionListener implements ActionListener { public void actionPerformed (ActionEvent event) { /*variabile temporanea utilizzata per scambiare le direzioni */ int aux ; /*per ogni forma modifica la posizione in base alla direzione*/ for ( int i = 0; i < oggetti.size (); i++) { int xTemp,yTemp; Point puntoTemp; puntoTemp = (Point)oggetti.get (i); xTemp = (int) puntoTemp.getX (); yTemp = (int) puntoTemp.getY (); /*muovi nella direzione scelta*/ switch(direzione[i]) { case NORD: { yTemp -= AMPIEZZA_CAS; puntoTemp.setLocation(xTemp,yTemp); } break; case EST: { xTemp += AMPIEZZA_CAS; puntoTemp.setLocation(xTemp,yTemp); } break; case SUD: { yTemp += AMPIEZZA_CAS; puntoTemp.setLocation(xTemp,yTemp); } break; case OVEST: { xTemp -= AMPIEZZA_CAS; puntoTemp.setLocation(xTemp,yTemp); } break; case NORD_EST: { xTemp += AMPIEZZA_CAS; yTemp += AMPIEZZA_CAS; puntoTemp.setLocation(xTemp,yTemp); } break; case SUD_EST: { xTemp += AMPIEZZA_CAS; yTemp -= AMPIEZZA_CAS; puntoTemp.setLocation(xTemp,yTemp); } break; case SUD_OVEST: { xTemp -= AMPIEZZA_CAS; yTemp -= AMPIEZZA_CAS; puntoTemp.setLocation(xTemp,yTemp); } break; case NORD_OVEST: { xTemp -= AMPIEZZA_CAS; yTemp += AMPIEZZA_CAS; puntoTemp.setLocation(xTemp,yTemp); } break; } } repaint(); } } }
__________________
the AUSTRALOPITECI |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Feb 2005
Messaggi: 127
|
dai aiutatemi! ... ditemi almeno se posso udsare gli arraylist o se con questi arraylist non fa
__________________
the AUSTRALOPITECI |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jul 2004
Messaggi: 1578
|
Vedi delle "linee" perchè non ridisegni lo sfondo e ogni volta aggiungi i punti senza cancellare quelli del frame precedente; questo succede perchè estendi JApplet, la quale ridefinisce il metodo update di Component eliminando il ridisegno del background.
Una prima soluzione molto semplice è cambiare Codice:
public class CatchForms extends JApplet Codice:
public class CatchForms extends Applet Se invece ti serve che sia una JApplet puoi ridefinire update aggiungendo questo Codice:
public void update( Graphics page ) { page.setColor( getBackground() ); page.fillRect( 0 , 0 , page.getClipBounds().width , page.getClipBounds().height ); page.setColor( getForeground() ); paint( page ); } |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Feb 2005
Messaggi: 127
|
end.is.forever: GRAZIE GRAZIE GRAZIE GRAZIE GRAZIE GRAZIE 10000000000000000000000
![]()
__________________
the AUSTRALOPITECI |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:44.