Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [java]problema con i bordi

    ho cercato in lungo e in largo sia su questo forum che in altri, ma non ho trovato nessuna soluzione 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

    codice:
    /**
     * @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
    vi ringrazio in anticipo, se trovate una soluzione mi risolvereste molti problemi

  2. #2
    per me dovresti mettere nel paint un check delle coordinate...se coincidono fai un reset.

  3. #3
    Originariamente inviato da franksisca
    per me dovresti mettere nel paint un check delle coordinate...se coincidono fai un reset.
    ho aggiunto questo controllo nel thread, xò non funziona, o non molto bene

    codice:
    public void attiva()
        {
           th = new Thread()
                    {
                    	                // ridefinizione del metodo run
                    public void run()
                        {
                          for (;;)
                              {
                              try {
                                  sleep(20);
                                  }
                              catch (InterruptedException e)
                                  {
                                  System.out.println("thread interrotto");
                                  return;
                                  }
                                 [RED] if((Y==30) && ((X>=25) && (X<=625)) )
                                  {
                                  	
                                  	System.exit(0);                             
                                  	X=35;
                                  	Y=45;
                                  }[/RED]
                              } // for
                        }
                    };
    
            th.start();
        } // [m] attiva
    dove X e Y sono appunto le coordinate della mia macchinina quell' IF è solo per la prima riga del mio percorso, devo ancora farlo per tutte le altre ma vorrei che funzionasse prima di scriverlo per le altre, così non funziona , consigli???

  4. #4
    up

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.