Animacja, brak wyświetlania elementów, przeroczyste okno

0

Próbuję napisać taką grę: http://www.lemurlab.pl/pliki/strzelanie_do_balonow/gra.html . Chcę na razie zrobić prostą animację, która będzie przesuwać balon w prawo. Po umieszczeniu w mainie w nieskończonej pętli metody repaint() i opóźnienia o 50ms po uruchomieniu programu wyświetla się jedynie puste przezroczyste okienko. Przedtem wszystkie elementy wyświetlały się poprawnie. Czy ktoś mógłby mi z tym pomóc?

Klasa główna Balony2

 package balony2;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;


/**
 * Klasa główna zawierająca main
 */
public class Balony2 extends Canvas implements Runnable {      

    /**
     * @param args the command line argument
     */
    private int x = 0;

    private int y = 0;

    private int size = 0;

    Balony2() {}    

        public void run()
        {        }
        

    /**
     * Metoda tworząca obiekt klasy Okno i wyświetlająca dane o grze
     */
    public static void main(String[] args) throws Exception {
       
        /**
         * Utworzenie obiektu klasy Okno
         */
        
           EventQueue.invokeLater(new Runnable() {
        	public void run() 
                {
                    final Okno o;
                    o = new Okno();
                    o.setLocationRelativeTo(null);
                    o.setVisible(true); 
                    while(true)
                    {
                        o.PanelGry.repaint();
                        try {
                                Thread.sleep(50);
                            } catch (InterruptedException ie) {
                            }
                    }
                }  
               
           });
                  }
                   
}

Klasa Okno

package balony2;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

 * Klasa wyświetlająca okno gry
 */


public class Okno extends JFrame implements ActionListener {
    
    public OknoRysowania PanelGry;
    public JPanel PanelBoczny;
    
    private JButton Button1;
    private JButton Button2;
    private JButton Button3;
    
    //JFrame frame = new JFrame();
    
 /**
  * Konstruktor klasy Okno 
  */   
  public   Okno()
    {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    CzytanieZPliku a = new CzytanieZPliku();
        
    setTitle("Balony");   
    

    PanelBoczny = new JPanel(new GridLayout(10,0));
    
    Button1 = new JButton("Start");
    Button1.addActionListener(this);
    
    Button2 = new JButton("Pause");
    Button2.addActionListener(this);
    
    Button3 = new JButton("Wyjscie");
    Button3.addActionListener(this);
    
    PanelBoczny.add(Button1);
    PanelBoczny.add(Button2);
    PanelBoczny.add(Button3);
    
    PanelGry = new OknoRysowania(this);

    JPanel PanelAll = new JPanel();    
    PanelAll.setLayout(new BorderLayout());
    
    PanelAll.add(PanelGry, BorderLayout.CENTER);
    PanelAll.add(PanelBoczny, BorderLayout.WEST);    
    
    PanelBoczny.setPreferredSize(new Dimension(100,a.zwrocWysokoscOkna()));    
    PanelGry.setPreferredSize(new Dimension(a.zwrocSzerokoscOkna(),a.zwrocWysokoscOkna()));
    PanelBoczny.setBackground(Color.LIGHT_GRAY);
    PanelGry.setBackground(Color.PINK);
    
    add(PanelAll);
    pack();
        
}  
   /**
    * Metoda obsługująca akcje przycisków panelu bocznego 
    */
  public void actionPerformed(ActionEvent e)
 {
     Object source = e.getSource();
     if(source==Button1){ 
        System.out.println("Start");
     }  
     else if(source==Button2){
      
     }
     else if(source==Button3){       
     dispose();       
     }
    }
    
}

Klasa Oknorysowania

package balony2;

import java.awt.Graphics;
import java.awt.event.ComponentAdapter;
import javax.swing.JPanel;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
    /**
    * Klasa OknoRysowania rysująca elementy planszy
    */
public class OknoRysowania extends JPanel implements MouseListener,MouseMotionListener, Runnable {
    
    private float wsp_szer;
    private float wsp_wys;    
    public Okno gf;
    private int mouseX;
    private int mouseY;
    public Balonik Ruchomy;
    public double x, y;
    public boolean move;
    /**
    * Konstruktor klasy OknoRysowania
    */
    public OknoRysowania(Okno gf) {
        addMouseListener(this);
        addMouseMotionListener(this);
        this.gf = gf;
        
            for (int i = 0; i < 14; i++) 
            {
                for (int k = 0; k < 5; k++){tab[i][k] = new Balonik();}    
            }
            Ruchomy = new Balonik();
            x = 7*30;
            
            y = 14*30;
                    this.addComponentListener(new ComponentAdapter() {
           
        });    
        }      
    /**
    * Utworzenie tablicy obiektów klasy Balonik
    */
    Balonik[][] tab = new Balonik[15][15];

    
    CzytanieZPliku b = new CzytanieZPliku();
    int szerpocz = b.zwrocSzerokoscOkna();
    int wyspocz = b.zwrocWysokoscOkna();
    
    float mSzer()
    {
    int szer = getWidth();
    wsp_szer = (float)szer/(float)szerpocz;
    return wsp_szer;
    };
    
    float mWys()
    {
    int wys = getHeight();
    wsp_wys = (float)wys/(float)wyspocz;
    return wsp_wys;
    };
    
    /**
    * Metoda rysująca obiekty na planszy
    */  
        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);

            int szer = getWidth();
            int wys = getHeight();
            wsp_szer = (float)szer/(float)szerpocz;
            wsp_wys = (float)wys/(float)wyspocz;
            System.out.println(wsp_szer);
            g.setColor(Ruchomy.zwrocKolor());
            System.out.println("x " + x);
            g.fillOval((int)(x*wsp_wys),(int)(14*30*wsp_wys),(int)(30*wsp_szer),(int)(30*wsp_wys));
            
            
            
            for(int i=0; i<14; i++)
       {
           for(int k=0; k<4; k++)
           {   
               if ( (k % 2) == 0){
               g.setColor(tab[i][k].zwrocKolor());
               g.fillOval((int)(i*30*wsp_szer),(int)(k*30*wsp_wys),(int)(30*wsp_szer),(int)(30*wsp_wys));
               }
               else {
                   g.setColor(tab[i][k].zwrocKolor());
               g.fillOval((int)(i*30*wsp_szer)+(int)(15*wsp_szer),(int)(k*30*wsp_wys),(int)(30*wsp_szer),(int)(30*wsp_wys));
               
               }            
           }
       }
    }     
         @Override
    public void mouseClicked(MouseEvent e) {
        System.out.println("mouseClicked");
        System.out.println(mouseX);
        System.out.println(mouseY);    
        
    }
public void run()
{

}
    @Override
    public void mousePressed(MouseEvent e)  {
   mouseX = e.getX();
   mouseY = e.getY();

   for(int i=0; i<100; i++)
   {
   x = x+1;  
   move = true;
   
  }
 
    }
    @Override
    public void mouseReleased(MouseEvent e) {    }

    @Override
    public void mouseEntered(MouseEvent e) {    }

    @Override
    public void mouseExited(MouseEvent e) {    }

    @Override
    public void mouseDragged(MouseEvent e) {    }

    @Override
    public void mouseMoved(MouseEvent e) {   }
}

Klasa Balonik

package balony2;

import java.util.Random;
import java.awt.Color;

        /**
         * Klasa Balonik
         */
public class Balonik {
        /**
         * Konstruktor domyślny obiektu klasy blonik
         */
    public Balonik () {}
    
     /**
         * Metoda losująca kolor objektu balonik
         */
        public Color losujKolor()
        {
        Color kolory[] = {Color.BLACK, Color.BLUE, Color.RED, Color.GREEN, Color.ORANGE}; 
	Color losowy = kolory[liczbaKolor()];
        return losowy;
        }
        
         /**
         *  Metoda losująca libcze odpowiadającą kolorowi balonu
         */
        
        public int liczbaKolor()
        {
            
            Random generator = new Random();

               int m = generator.nextInt(5);
               
            
            return m;
        }
        
         /**
         * Deklaracja metod w klasie balonik
         */
        Color kolorek = losujKolor();
        Color zwrocKolor(){return kolorek;}
}
0

Wygląda jak chamsko przepisane z jakiegoś tutoriala. Postaraj się najpierw lepiej sformatować kod, ciężko się w tym połapać. Druga sprawa, co zrobiłeś takiego że przestało działać? Mógłbyś podesłać cały projekt w rarze, żeby ktoś dał radę odpalić i sprawdzić czemu nie działa?

1 użytkowników online, w tym zalogowanych: 0, gości: 1