[JAVA] zmienianie wartości w czasie

0

Witam mianowicie mam do napisania aplet... przykładowy znajduje się na http://ii3.ap.siedlce.pl/~mariusz/applet/NewJApplet.html moje pytanie odnosi się do tego apletu z kółeczkami bo z kalkulatorem sobie poradziłem... zamieszczę kod źródłowy w którym mam już wszystko zdefiniowane lecz nie potrafię sobie poradzić z tym aby kółeczka się poruszały... jeśli mógł by mi ktoś pomóc bym był bardzo wdzięczny.

public class Zegarek extends javax.swing.JApplet
{
    int a;
    int b;
    int c;
    int d;
    ActionListener actionsListener;

    public Zegarek()
    {
        a = 0;
        b = 280;
    }

    public void init()
    {
        getContentPane().setBackground(Color.YELLOW);
        repaint();
    }

    public void paint(Graphics ekran)
    {
        ekran.setColor(Color.YELLOW);
        ekran.fillRect(0, 0, 340, 100);
        ekran.setColor(new Color(0, 255, 0));
        ekran.fillRect(70, 10, 200, 50);
        ekran.setColor(new Color(255, 0, 0));
        ekran.fillOval(a, 10, 50, 50);
        ekran.setColor(new Color(0, 0, 255));
        ekran.fillOval(b, 10, 50, 50);
        SimpleDateFormat data = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss");
        ekran.setFont(new Font("Tahoma", Font.BOLD, 18));
        ekran.setColor(Color.BLACK);
        ekran.drawString(data.format(new Date()), 75, 40);
    }

public ActionListener actionListener = new ActionListener() {

        public void actionPerformed(ActionEvent e) {

          repaint();
        }
    };

public void start(){
Timer timer = new Timer(1000,actionListener);
timer.start();
}}

Z góry dziękuję za pomoc :)

0

chyba wystarczy:

//...
public ActionListener actionListener = new ActionListener() {

        public void actionPerformed(ActionEvent e) {
          a+= 5; //ta liczba to szybkość
          b+= 6; //ta liczba to szybkość
          repaint();
        }
    };
//...

Następnie zmienne te są używane już w twoim programie do określenia położenia kół:

//...
ekran.fillOval(a, 10, 50, 50);
//...
ekran.fillOval(b, 10, 50, 50);
//...

Zalecam też zmianę timera na taki o mniejszym interwale, bo interwal 1000 to 1000/1000= 1FPS.
Interwał 100 byłby już lepszy (1000/100=10FPS).
Żeby animacja była całkowicie płynna musi mieć co najmniej 30FPS, czyli interwał ok 33.

0

niop już jest prawie to co powinno... tylko teraz jeszcze jak zrobić żeby jak dojdzie do końca tzn a = 280;
b = 0; zawracało ? bo żeby przerwało to wiem tylko z zawracaniem mam mały problem

0

dodajesz dodatkowe inty:

int a_speed;
int b_speed;

W konstruktorze:

a_speed = 5;
b_speed = 6;

A w listenerze:

a+= a_speed; //ta liczba to szybkość
if((a_speed>0)&&(a>500)) a_speed=-a_speed; //500 to maksymalne położenie
if((a_speed<0)&&(a<100)) a_speed=-a_speed; //100 to minimalne położenie

i to samo robisz dla b

Jeśli zrobisz to też dla drugiej osi, to będziesz miał efekt kuli odbijającej się w określonej dwuwymiarowej prestrzeni.

0

dziękuję bardzo za pomoc wszystko działa jak trzeba ;) pozdrawiam :-)

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