/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Doublebuffer
Fra : Jacob Hansen


Dato : 20-12-01 13:51

Hejsa, vi sidder og roder med noget doublebuffering i en applet, men forstår
ikke helt præcist hvad det er der foregår. Hvis der er nogen, der kunne
forklare os/kommentere nedenstående kode (hovedsagligt update-metoden),
ville vi være dybt taknemmelige!

import java.awt.*;

public class DoubleBufferHandler
{ DoubleBufferedComponent comp;
protected Dimension d;
protected Image im;
protected Graphics offscreen;

public DoubleBufferHandler(DoubleBufferedComponent comp)
{ this.comp = comp;
}

final public void update(Graphics g)
{ if (im == null) //Hvorfor gøres nedenstående linier? Hvad bruges
det til?
{ d = comp.getSize();
im = comp.createImage(d.width, d.height);
offscreen = im.getGraphics();
}
comp.paintFrame(offscreen);
g.drawImage(im, 0, 0, comp); // Hvad er det der sker her? Hvad
bliver der af offscreen objektet? Hvornår tegnes det ud? Er g=skærmen?
}
}

På forhånd tak!



 
 
Martin Ehmsen (20-12-2001)
Kommentar
Fra : Martin Ehmsen


Dato : 20-12-01 14:00

Jacob Hansen wrote:

> Hejsa, vi sidder og roder med noget doublebuffering i en applet, men
forstår
> ikke helt præcist hvad det er der foregår. Hvis der er nogen, der
kunne
> forklare os/kommentere nedenstående kode (hovedsagligt
update-metoden),
> ville vi være dybt taknemmelige!

Har I ikke selv skrevet koden???
Så kan det nok være svært at læse andres kode, hvis de ikke har
kommenteret det ordentligt!

> import java.awt.*;
>
> public class DoubleBufferHandler
> { DoubleBufferedComponent comp;
> protected Dimension d;
> protected Image im;
> protected Graphics offscreen;
>
> public DoubleBufferHandler(DoubleBufferedComponent comp)
> { this.comp = comp;
> }
>
> final public void update(Graphics g)
> { if (im == null) //Hvorfor gøres nedenstående linier? Hvad
bruges
> det til?
> { d = comp.getSize();
> im = comp.createImage(d.width, d.height);
> offscreen = im.getGraphics();
> }
> comp.paintFrame(offscreen);
> g.drawImage(im, 0, 0, comp); // Hvad er det der sker her?
Hvad
> bliver der af offscreen objektet? Hvornår tegnes det ud? Er g=skærmen?
> }
> }

Hvad er lige en DoubleBufferedComponent ?? Den står ikke i min API, så
hvis det er en klasse I selv/andre har skrevet så bliver vi jo nødt til
at se den...

Mvh.
Martin Ehmsen
--
"Life is good for only two things,
discovering mathematics and teaching mathematics"
Siméon Poisson

Jacob Hansen (20-12-2001)
Kommentar
Fra : Jacob Hansen


Dato : 20-12-01 14:07

DoubleBufferedComponent er blot et interface.
Koden er taget fra en bog, hvor den faktisk ikke er forklaret.....

Her er koden til DoubleBufferedComponent

import java.awt.*;

public interface DoubleBufferedComponent extends
java.awt.image.ImageObserver
{ void paintFrame(Graphics g);
Dimension getSize();
Image createImage(int width, int height);
}



Simon Mikkelsen (22-12-2001)
Kommentar
Fra : Simon Mikkelsen


Dato : 22-12-01 22:34

D. Thu, 20 Dec 2001 13:50:32 +0100 syntes "Jacob Hansen"
<vader@deathstar.dk> at dk.edb.programmering.java skulle vide at
<d6lU7.747$Zm5.147401@news000.worldonline.dk>.

>Hejsa, vi sidder og roder med noget doublebuffering i en applet, men forstår
>ikke helt præcist hvad det er der foregår. Hvis der er nogen, der kunne
>forklare os/kommentere nedenstående kode (hovedsagligt update-metoden),
>ville vi være dybt taknemmelige!

Nogle gange har man set java-appletter ol. med animationer, der står og
blinker, dvs. at før en ny frame i animationen optegnes, tegnes hele
billedet fx. hvidt. Det er ikke pænt. Ved double-buffering, tegner man
billedet i hukkommelsen, og sender det til skærmen. Så tegner man på en ny
tegneflade, og bytter så de to ud.

Dermed har man altid en tegneflade man kan tegne hvid fra start, og man
undgår flimmer. Det kræver rundt regnet dobbelt så meget hukkommelse, men
gør jobbet.

>import java.awt.*;
>
>public class DoubleBufferHandler
>{ DoubleBufferedComponent comp;
> protected Dimension d;
> protected Image im;
> protected Graphics offscreen;
>
> public DoubleBufferHandler(DoubleBufferedComponent comp)
> { this.comp = comp;
> }
>
> final public void update(Graphics g)
> { if (im == null) //Hvorfor gøres nedenstående linier? Hvad bruges
>det til?
> { d = comp.getSize();
Strørrelsen på den komponent, hvorpå der skal tegnes, hentes.

> im = comp.createImage(d.width, d.height);

Der bliver laget et nyt billede, ud fra de hentede dimentioner.

> offscreen = im.getGraphics();

Grapgics-objektet, tilhørende den tegneflade der ikke vises, hentes fra det
netop lavede billede.

> }
> comp.paintFrame(offscreen);

offscreen-objektet tegnes på komponenten.

> g.drawImage(im, 0, 0, comp); // Hvad er det der sker her? Hvad
>bliver der af offscreen objektet? Hvornår tegnes det ud? Er g=skærmen?

Komponenten tegnes på appletten. Mht. offscreen-objektet, er det givet
videre til comp. g er det Graphics-objekt (kan v. Java 1.2 down castes til
et Graphics2D-objekt, der kan noget mere) der representerer appettens
tegneflade, så det kan man godt kalde skærmen.

> }
>}


--
Mvh. Simon Mikkelsen, ingeniørstuderende

www.zipstat.dk Gratis, reklamefri tæller/statistik til enhver hjemmeside
-Se bla. hvor dine besøgende kommer fra, og brug den usynlige tællerkode.

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste