Wątek zablokowany 2011-12-08 16:20 przez madmike.

Java - znikanie linii pod wpływem naciśnięcia przycisku

0

Witam. Muszę stworzyć animowany model wszechświata w javie. Mam już planety, ruch itd, wszystko gra i buczy, ale mam jeden mały problem. Otóż muszę wyrysować orbity planet i sprawić by znikały one po naciśnięciu klawisza F3 i były "zniknięte" tak długo jak trzymam klawisz.
Orbity narysowałam metodą g2.drawOval, ale nie mam pojęcia w jaki sposób mogłabym się ich elegancko pozbyć. Czy jest jakiś sposób, żeby dany kształt/daną linię uczynić niewidzialnym/ą?
Myślałam też żeby przez naciśnięcie F3 zmienić kolor okręgu na czarny i zleje on się wtedy z tłem, lecz nie wiem jak mogę ingerować w g2.setColor(Color.WHITE); by z white zrobić black.

Kod pozwoliłam sobie trochę poobcinać, bo był dosyć długi.

 
public class Animation extends JPanel implements Runnable, KeyListener{

	private static final long serialVersionUID = 1L;
	private Image sun, merkury, wenus, ziemia, mars;
    private Thread animThreat;
    private int x,x1, y,y1, r, r1, r2, r3, wysokosc, szerokosc, wysokoscMerkury, szerokoscMerkury, wysokoscWenus, szerokoscWenus, wysokoscMars, szerokoscMars;
    private double kat;

    private final int refreshRate = 20;
    private boolean isPaused = false;
   

    public Animation() {
		...
	}

    
    public void paint(Graphics g) {
        super.paint(g);

        Graphics2D g2 = (Graphics2D)g;
        g2.setColor(Color.WHITE);
     
        g2.drawImage(merkury, (int) (x1 + r * 0.3871 * Math.cos(kat/0.2408)), (int) (y1 + r * 0.3871 * Math.sin(kat/0.2408)), wysokoscMerkury, szerokoscMerkury, this); //merkury
        g2.drawOval((int) (x1-r*0.3871+15), (int) (y1-r*0.3871+15), 2*r1, 2*r1);
       
        g2.drawImage(wenus, (int) (x1 + r * 0.7233 * Math.cos(-kat/0.6152)), (int) (y1 + r * 0.7233 * Math.sin(-kat / 0.6152)), wysokoscWenus, szerokoscWenus, this); //wenus
        g2.drawOval((int) (x1-r*0.7233+15), (int) (y1-r*0.7233+15), 2*r2, 2*r2);
        
        g2.drawImage(ziemia, (int) (x1 + r * Math.cos(kat)), (int) (y1 + r * Math.sin(kat)), wysokosc, szerokosc, this); //ziemia
        g2.drawOval(x1-r+15, y1-r+15, 2*r, 2*r);
        
        g2.drawImage(mars, (int) (x1 + r * 1.5237 * Math.cos(kat/1.8808)), (int) (y1 + r * 1.5237 * Math.sin(kat / 1.8808)), wysokoscMars, szerokoscMars,this); //mars
        g2.drawOval((int) (x1-r*1.5237+15), (int) (y1-r*1.5237+15), 2*r3, 2*r3);
        
        g2.drawImage(sun, x, y, wysokosc, szerokosc,this); //slonce
       
        
        g.dispose();
   
    }


    public void movement() {

    	kat += 0.02;

    	if (kat > 360) {
    		kat = 0;
        }	
    }

    public void run() {

        long beforeTime, timeDiff, sleep;

        beforeTime = System.currentTimeMillis();
     

        while (true) {
        

        	while (isPaused)
        	{
        		try {
					Thread.sleep(200);
				} catch (InterruptedException e) {
					System.out.println("interrupted");
				}
        	}
      
        	
            movement();
            repaint();

            timeDiff = System.currentTimeMillis() - beforeTime;
            sleep = refreshRate - timeDiff;

       ...

            beforeTime = System.currentTimeMillis();
        }
  
    }
    
    public void keyPressed(KeyEvent e) {

        int key = e.getKeyCode();

        if (key == KeyEvent.VK_SPACE) {
			isPaused = !isPaused;
        }
        else if (key == KeyEvent.VK_F1) {
        	kat += 0.1;
        }
        else if (key == KeyEvent.VK_F2) {
        	kat += 0.00000000001;
        }
        else if (key == KeyEvent.VK_F3) {
        	
        	???
        }
        else if (key == KeyEvent.VK_LEFT) {
        	x = x-2;
        }
        else if (key == KeyEvent.VK_RIGHT) {
        	x = x+2;
        }
        else if (key == KeyEvent.VK_UP) {
        	y = y-2;
        }
        else if (key == KeyEvent.VK_DOWN) {
        	y = y+2;
        }
        	
        
        
    }
...

}
0

Orbity narysowałam metodą g2.drawOval, ale nie mam pojęcia w jaki sposób mogłabym się ich elegancko pozbyć. Czy jest jakiś sposób, żeby dany kształt/daną linię uczynić niewidzialnym/ą?

edit2:
Na to pytanie jedyna sensowna odpowiedź to opierdolenie autora pytania za niemyślenie...
Madmike jednak nalega, aby podać inną odpowiedź... więc proszę, oto odpowiedź jak dla idioty:
nie chcesz czegoś rysować, to tego nie rysuj...
Jeśli ta odpowiedź zmieni coś w jego sposobie myślenia, to ja się chyba zastrzelę z procy...

if(f3_nie_jest_wcisnięty)
rysujOrbite()

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