"wracanie" animacji po sekundzie

0

Witam, wyjaśnię problem trochę szerzej niż w temacie. Chciałbym zrobić coś takiego, że po naciśnięciu spacji pojawia się kwadrat na planszy i po sekundzie przesuwa się na wskazane współrzędne. SPACJA - POJAWIENIE SIĘ KWADRATU - SEKUNDA - ZNIKNIECIE KWADRATU NA WSKAZANE WSPÓŁRZĘDNE. Kombinowałem na wiele sposobów, tworzyłem try{Thread.sleep(1000);}catch(Exception ex){} ale to daje zupełnie odwrotny efekt.

Przykładowe fragmenty kodu, może się po coś przydadzą.

if (keyCode == KeyEvent.VK_SPACE)
            {
                    a = x + 50;
                                b = y;
                                this.repaint();
 
            }



class teraz extends JPanel
        {
                public void paint (Graphics o)
                {
                        o.setColor(Color.white);
                        o.fillRect(0,0,320,320);
                        o.setColor(Color.black);
                        o.fillRect(110, 10, 50, 50);
                        o.setColor(Color.white);
                        o.fillRect(x, y, 50, 50);
                        o.setColor(Color.red);
                        o.fillOval(x+9, y+9, 30, 30);
                        o.setColor(Color.yellow);
                        o.fillRect(0, 0 , 320, 10);
                        o.fillRect(0, 0 , 10, 320);
                        o.fillRect(0, 310 , 320, 10);
                        o.fillRect(310, 0 , 10, 320);
                        o.setColor(Color.white);
                        o.fillRect(s, z, 50, 50);
                        o.setColor(Color.green);
                        o.fillOval(s+9, z+9, 30, 30);
                        o.setColor(Color.red);
                        o.fillRect(a, b , 50, 50);
 
                }
        } 

Z góry dzięki za pomoc

0

Timer?

0

Próbowałem już wcześniej właśnie timera i mi za nic nie wychodziło. Szukałem gotowców, tutoriali, ale średnio zrozumiałem, jak tego użyć.

if (keyCode == KeyEvent.VK_SPACE)
            {
            	
            	a = x+50;
            	b = y;
            	Timer timer1 = new Timer();
            	MyTimerTask timer1_task = new MyTimerTask();
            	timer1.schedule (timer1_task, 0, 20);

            	
				
				
            } 
class MyTimerTask extends TimerTask
	 {
	  public void run()
	  {
		  a = 350;
		  b = 350;
	  }
	 }

To co jest na górze to jedna z opcji, którymi próbowałem uporać się z tym problemem. Pewnie kiedyś się dowiem co za głupoty właśnie wysłałem, ale jakoś trzeba się tego nauczyć.

0

Uproszczona wersja:

        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            if(rysuj)
            {
                g.setColor(Color.GREEN);
                g.fillRect(x,y,20,20);
            }
        }

W klasie głównej

    private boolean rysuj=false;
    private int x=10;
    private int y=10;
    private Timer timer=null;
    ...
    public void keyReleased(KeyEvent ke)
    {
        if(ke.getKeyCode()==KeyEvent.VK_SPACE)
        {
            rysuj=true;
            timer=new Timer(1000, new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    x+=50;
                    repaint();
                }
            });
            timer.setRepeats(false);
            timer.start();
        }
        repaint();
    }

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