开发者

java double buffering problem

Whats wrong with my applet code which does not render double buffering correctly.I am trying and trying.But failed to get a solution.Plz Plz someone tell me whats wrong with my code.

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


public class Ball 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

    Image buffer=null;
    //Graphics graphic=null;

    int w,h;

    public void init()
    {
        Dimension d=getSize();
        w=d.width;
        h=d.height;

        buffer=createImage(w,h);
        //graphic=buffer.getGraphics();

        setBackground (Color.black);

    }

    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
            repaint();

            x_pos++;
            y_pos++;
            //x2--;
            //y2--;

            // Neuzeichnen des Applets


            if(x_pos>410)
                x_pos=20;

            if(y_pos>410)
                y_pos=20;

            try
            {

                Thread.sleep (30);
            }
            catch (InterruptedException ex)
            {
                // do nothing
            }

            Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
        }
    }

    public void paint (Graphics g)
    {

        Graphics screen=null;

        screen=g;
        g=b开发者_JAVA技巧uffer.getGraphics();

        g.setColor(Color.red);


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


        screen.drawImage(buffer,0,0,this);

    }


    public void update(Graphics g)
    {

        paint(g);
    }

}

what change should i make.When offscreen image is drawn the previous image also remain in screen.How to erase the previous image from the screen??


It looks like you do not cleanup your buffer image between draws. You could test this by changing your code to:

    g.setColor(Color.red);
    g.fillOval(x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);

    screen.drawImage(buffer,0,0,this);

    g.setColor(Color.green);
    g.fillOval(x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);

Which draws the red ball and wipes it green afterwards, so you sould see a red ball leaving a green trail. Replacing the green color by your background color would do the trick.


You are not clearing the buffer between two renderings.

How about adding

g.fillRect(0, 0, buffer.getWidth(), buffer.getHeight());

using your background color (black?), before calling g.setColor(Color.RED); g.fillOval...?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜