ho cercato in lungo e in largo sia su questo forum che in altri, ma non ho trovato nessuna soluzioneora vi posto il codice della mia classe principale e del main, premetto che il mio progetto riguarda un circuito automobilistico in cui ho un rettangolo(la macchinina) che si muove in un circuito fatto da linee, il mio problema è riuscire a far si che quando la mia macchinina tocca una di queste linee/bordo torni all'inizio del percorso
vi ringrazio in anticipo, se trovate una soluzione mi risolvereste molti problemicodice:/** * @author De Bacco Giacomo * @version 1.3 Ultima modifica: 2011/5/31 */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import java.awt.geom.*; import java.awt.Dimension.*; import java.awt.Graphics.*; import java.awt.Image.*; import javax.swing.ImageIcon.*; /** * * finestra contenente un pannello * */ class MyFrame extends JFrame { MyFrame(int x0, int y0, int larghezza, int altezza) { // settaggio caratteristiche della finestra setBounds(x0,y0,larghezza,altezza); setBackground(new Color(0,0,250)); setTitle(getClass().getName()); setResizable(false); setVisible(true); // viene aggiunto un ascoltatore per poter chiudere il frame addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.out.println("Fine dell'applicazione\n"); System.exit(0); // chiusura dell'applicazione } // [m] windowClosing } ); } // [c] MyFrame } // [class] MyFrame /** * pannello su cui disegnare * */ class MyPanel extends JPanel implements KeyListener { // ## VARIABILI ## public static int inc=7; // incremento o decremento per alcuni cicli final static BasicStroke Stroke = new BasicStroke(1.0f); final static BasicStroke wideStroke = new BasicStroke(8.0f); final static BasicStroke cofanStroke = new BasicStroke(3.0f); //variabili circuito public static int Iniziox=30; public static int Inizioy=30; public static int Finex=700; public static int Finey=500; // Coordinate MACCHINA public static int X=30; public static int Y=45; public static int X2=30; public static int Y2=45; // Variabili per la tastiera String tasto; int Codice; // Valori rettangolo della MACCHINA int larghezzaR=25; int altezzaR=15; private Thread th; // ## END VARIABILI ## /** * costruttore */ public MyPanel(int lar, int alt) { // settaggi di configurazione setSize(lar,alt); setBorder(new EtchedBorder()); setBackground(new Color(255,255,255)); setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); addKeyListener(this); //#### gestione degli eventi intercettati dal pannello #### } // [c] MyPanel /** * Ascoltatore eventi tastiera * */ public void keyPressed(KeyEvent e) { //giocatore 1 Codice= e.getKeyCode(); tasto= e.getKeyText(Codice); if(tasto=="Sinistra"){ X-=inc; } if(tasto=="Destra"){ X+=inc; } if(tasto=="Su"){ Y-=inc; } if(tasto=="Giù"){ Y+=inc; } repaint(); } public void keyReleased(KeyEvent e){} public void keyTyped(KeyEvent e){} /** * ridisegno della parte grafica * (questo metodo viene richiamato automaticamente quando la finestra * deve essere ridisegnata (ad esempio quando viene sovrapposta * da un'altra) */ public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; super.paint(g); //percorso------------------------------------------------------ Percorso per=new Percorso(); per.disegna(g); //fine persorso------------------------------------------------------ //macchina------------------------------------------------------ Rettangolo rett=new Rettangolo(X,Y,larghezzaR,altezzaR,Color.RED); rett.disegna(g); //fina macchina------------------------------------------------------ } // [m] paint //#### begin thread #### /** * - creazione del thread (new Thread()) * - definizione del comportamento del thread (def. del metodo run()) * - attivazione del thread (th.start()) */ public void attiva() { th = new Thread() { // ridefinizione del metodo run public void run() { for (;;) { try { sleep(15000); } catch (InterruptedException e) { System.out.println("thread interrotto"); return; } } // for } }; th.start(); } // [m] attiva //#### end thread #### } // [class] My Panel class Racing { public static void main(String[] args) { // creazione finestra e componenti MyFrame f = new MyFrame(13,0,1280,800); // contenitore top-level MyPanel p = new MyPanel(1180,750); // pannello su cui disegnare Animazione a = new Animazione(); p.setLocation(0,0); a.setLocation(100,750); // attacco del pannello di disegno f.setLayout(null); // altrimenti il pannello invade tutta la finestra f.add(p); // attacco del pannello alla finestra f.add(a); p.attiva(); // visualizazzione f.setVisible(true); p.repaint(); p.requestFocus(); } // [m] main } // [class] Swing03

ora vi posto il codice della mia classe principale e del main, premetto che il mio progetto riguarda un circuito automobilistico in cui ho un rettangolo(la macchinina) che si muove in un circuito fatto da linee, il mio problema è riuscire a far si che quando la mia macchinina tocca una di queste linee/bordo torni all'inizio del percorso
Rispondi quotando