Extras din curs
Java - Sectiunea 3
Reducerea efectului de palpaire la crearea animatiilor
Efectul suparator de palpaire a imaginii in cazul animatiilor, se poate evita prin :
- efectuarea operatiilor grafice intr-un obiect de textura din afara ecranului
- afisarea obiectului de textura
- redefinirea functiei update astfel incat ea sa nu stearga ecranul intre doua desenari succesive
Pentru acestea in applet-ul original vor fi efetuate urmatoarele modificari:
- crearea obiectului de textura din afara ecranului
Rectangle ZonaAp = bounds();
ImagineCeas = createImage ( ZonaAp.width, ZonaAp.height);
GraficaExtraEcran = ImagineCeas.getGraphics();
Se observa ca s-au obtinut mai intai dimensiunile zonei ocupate de applet, s-a creat un obiect imagine cu aceste dimensiuni, apoi un obiect de textura, pe baza acestei imagini.
- modificarea functiei paint astfel incat imaginea inainte de a fi afisata este pregatita in contextul grafic al texturii extra ecran.
public void paint(Graphics g) {
double alfa= nr_sec * Math.PI /30.;
GraficaExtraEcran.clearRect(0,0, l, h ); // sterge vechea imagine
GraficaExtraEcran.setColor(Color.red);
GraficaExtraEcran.drawOval(5,5,R+R+10, R+R+10);
GraficaExtraEcran.setColor(Color.blue);
GraficaExtraEcran.drawLine(xc,yc,
(int)(xc+(R-10)*Math.cos(alfa)),
(int)(yc+(R-10)*Math.sin(alfa))
);
g.drawImage(ImagineCeas, 0, 0, this);
}
Se disting in aceasta metoda trei etape importante:
- stergerea vechii imagini in obiectul textura, pentru a nu afecta ecranul,
- crearea noii imagini in obiectul textura extra ecran, deasemenea fara a afecta imaginea de pe ecran
- afisarea imaginii ceasului din textura pe ecran, cu ajutorul functiei drawImage()
Ultima etapa se desfasoara intr-un timp mult mai scurt decat cel necesar construirii imaginii direct pe ecran
- redefinirea metodei update()
public void update ( Graphics g)
{
paint (g);
}
In acest fel metoda update() nu mai sterge ecranul intre doua desenari succesive. Noua imagine, cu dimensiunile applet-ului, este afisata peste cea veche.
De notat ca pentru a obtine animatia, vechea imagine a fost totusi stearsa, dar in obiectul textura din afara ecranului.
Exemplu. Sprer deosebire de applet-ul Ceas, care desena un cerc de dimensiune fixa, urmatorul applet, CeasModificat, va desena un cerc avand raza egala cu R = min(l,h)/2-20, unde l si h sunt latimea respectiv inaltimea zonei applet definita prin tag-ul HTML:
<applet code=CeasModif width=400 height=300>
Fisierul sursa al acestui applet este prezentat in continuare.
import java.applet.*;
import java.awt.*;
public class CeasModif extends Applet implements Runnable {
int nr_sec;
int xc, yc, R;
int l, h;
Thread fir;
Preview document
Conținut arhivă zip
- Programare in Java Script.DOC