Programowanie obiektowe - JAVA
Informacje ogólne > Laboratorium 5 > Proste animacje

Proste animacje

Wątki można wykorzystać do tworzenia prostych animacji.

1. Najprostszy sposób na tworzenie animacji to stworzenie wątku zmieniającego wartość zmiennej wykorzystywanej przez metodę paint().

Np. wątek w pętli nieskończonej zmienia wartość zmiennych x i y, a metoda paint(Graphics g) zawiera jedynie: g.fillOval(x,y, r ,r):

Kod apletu: Anim1.java

2. Pokazana powyżej metoda tworzenia animacji nie jest optymalna. Można zaobserwować migotanie. Migotanie wynika z tego, że wywołąnie metody repaint() czyści ekran przy pomocy metody uptade(), a następnie wywołuje ponownie metodę paint(). Migotanie było bardziej widoczne, gdyby w metodzie paint() rysowane było więcej elementów.

Rozwiązaniem tego problemu może być "buforowanie" przy pomocy klasy Image. W taki przypadku wątek powodował by zmianę zawartości graficznej obiektu klasy Image, a metoda paint() rysowałaby jedynie ten obiekt.

Kod apletu: Anim2.java

Wykorzystując buforowanie można tworzyć wieloelementowe animacje pozbawione efektu migotania:

3. Ciekawe efekty można również uzyskać wczytując sekwencję obrazów z plików graficznych. Przykładowo używając pięć prostych plików jpg:

        

można uzyskać animację podobną do "pac-mana".

W tym celu można utworzyć tablicę obiektów klasy Image, zawierającą wszystkie obrazy, a w metodzie run() wątku sekwencyjnie wczytywać te obrazy.

Kod apletu: Pac.java i opis jego najważniejszych elementów:

Deklaracja tablicy obrazów klasy Image:
Image[] a = new Image[5];

Wczytanie obrazów do tablicy:
a[0] = getImage(getCodeBase(), "1.jpg");
a[1] = getImage(getCodeBase(), "2.jpg");
a[2] = getImage(getCodeBase(), "3.jpg");
a[3] = getImage(getCodeBase(), "4.jpg");
a[4] = getImage(getCodeBase(), "5.jpg");

Dodawanie obrazu (klasy Image) do grafiki gc (Graphics):
gc.drawImage(a[i], x*4, y, 64, 61, this);

Oczywiście efekt "pac-mana" można uzyskać w bardziej efektywny sposób poprzez odpowiednie wykorzystanie metody fillArc klasy Graphics (przykładowy kod: Pac2.java). Celem tego przykładu było pokazanie jak w prosty sposób można zrobić animacje z dowolnych obrazów/zdjęć wczytywanych z zewnątrz.