Gå til innhold

Anbefalte innlegg

Hei,

 

Lurte på om noen har innsikt i hvordan man gjør samme oppgaven som under, bare i Graphics2D og med antialiasing på?

 

public void paintComponent(Graphics g)
{
 super.paintComponent(g);
 g.setColor(new Color(50, 0, 255)); // f eks
 g.fillOval(50, 80, 10, 10); // f eks
}

 

Takk! Skriver mange poster for tiden, men det er ingen bedre måte å lære på enn å suge ut info (beklager ordvalget her...) av de lærde. :love:

Lenke til kommentar
Videoannonse
Annonse

Sure thing,

 


public void paint(Graphics graphics) {

 Graphics2D g2 = (Graphics2D)graphics;
 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

 g2.setColor(new Color(0x3200FF));
 g2.fillOval(50, 80, 10, 10);
}

 

Som du ser, akkurat samme greia. Graphics2D har bare endel ny funksjonalitet.

 

PS: Er anbefalt å bruke et buffer for offscreen rendering AKA double buffering for smoothere animasjon osv, eks på dette: http://www.realapplets.com/tutorial/DoubleBuffering.html

Lenke til kommentar
Haha. Nå ble det utslag på lag-o-meteret hvertfall. Er det flere levels med antialiasing som kan redusere laggen? Eller noen andre måter?

7779366[/snapback]

 

hehe, lag-o-meteret vil nok peake med antialiasing på, og fullscreen repaint. Derfor er det viktig å repainte kun de "skitne" områdene av skjermen. Dette kan for eksempel gjøres hvis du definerer en grense rundt hver ball, og kun repainter området +- 10px rundt hver ball for hver repaint. Da bruker du:

 

repaint(int x, int y, int witdh, int height)

 

metoden, som du da definerer hvilke områder av skjermen du vil tegne opp på nytt. Så hvis en av ballene er innenfor [10, 10, 40, 40], så kaller du repaint(0, 0, 50, 50). Get it?

 

Dette vil nok gi deg fantastiske resultater i hastighet, hvis du får det til.

 

PS: I Java2D kan du kun skru av og på antialiasing, såvidt meg bekjent.

Endret av krigun
Lenke til kommentar
Hmmm. Reduserte ikke noe merkbart med lag. Vel. Takk for tipset! =]

7780669[/snapback]

 

jaja, var vel litt korttenkt av meg, er vel bare selve antialiasingen som reduserer hastigheten :) Det er vel flere triks for å gjøre det litt bedre, blant annet ved å bruke VolatileImage som backbuffer (VolatleImage skal kunne være HW aksellerert), eksempelkode kan du se på:

 

http://weblogs.java.net/blog/chet/archive/...ileimage_n.html

 

Du kan også prøve med å starte app-en din med:

 

java -Dsun.java2d.opengl=true PhysX

 

har personlig ikke hatt stort hell med den siste da, men er verdt et forsøk. _SKAL_ visst funke på Java 6

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...