Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Graphics2D ja AntiAliasing-> "räpsyminen"

JussiR [31.10.2011 16:49:27]

#

Moi,

Olen tehnyt tämän esimerkin pohjalta kalastuspeliä: http://www.javacooperation.gmxhome.de/BallBewegungEng.html

Jos lisään tuohon esimerkkiin antialiasing, alkaa kaikki mitä piirretään, vilkkumaan/räpsymään. Kestääkö noiden kuvioiden piirrossa sitten niin kauan taustan piirron jälkeen, että noin käy?
Millä tavalla se pitäis toteuttaa jos haluaa reunojen pehmennyksen? Tässä miten yritin tuohon esimerkkiin laittaa:

import java.applet.*;
import java.awt.*;

public class Ballbewegung1 extends Applet implements Runnable
{
	// Initialisierung der Variablen
	int x_pos = 10;		// x - Position des Balles
	int y_pos = 100;	// y - Position des Balles
	int radius = 20;	// Radius des Balles

	RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

	public void init()
	{
		setBackground (Color.blue);
	}

	public void start ()
	{
		// Schaffen eines neuen Threads, in dem das Spiel läuft
		Thread th = new Thread (this);
		// Starten des Threads
		th.start ();
	}

	public void stop()
	{

	}

	public void destroy()
	{

	}

	public void run ()
	{
		// Erniedrigen der ThreadPriority um zeichnen zu erleichtern
		Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

		// Solange true ist läuft der Thread weiter
		while (true)
		{
			// Verändern der x- Koordinate
			x_pos ++;

			// Neuzeichnen des Applets
			repaint();

			try
			{
				// Stoppen des Threads für in Klammern angegebene Millisekunden
				Thread.sleep (20);
			}
			catch (InterruptedException ex)
			{
				// do nothing
			}

			// Zurücksetzen der ThreadPriority auf Maximalwert
			Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
		}
	}


	public void paint (Graphics g)
	{
	    rh.put (RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY );
		Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHints(rh);

		g2d.setColor  (Color.red);

		g2d.fillOval (x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);
	}

}

Ja täällä ne mun kalat pyörii, jos jotain kiinnostaa.. http://www.jrantala.com/kalat.html
Muuta ei ole valmiina.

Pekka Karjalainen [31.10.2011 19:13:34]

#

Linkkaamasi oppaan seuraava kappale käsittelee Double Buffering -tekniikkaa, jonka pitäisi ratkaista tämä ongelma. Oletko kokeillut käyttää sitä?

JussiR [31.10.2011 20:36:49]

#

Tosiaan, kiitoksia! Nyt on kaloilla pehmeät reunat.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta