我的applet代码有什么问题,它无法正确呈现双缓冲。我正在尝试 并且尝试。但是没有得到解决方案.Plz Plz有人告诉我我的代码有什么问题。
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=buffer.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);
}
}
我应该做出什么改变。当绘制屏幕外图像时,前一个图像也会保留在屏幕上。如何从屏幕上删除上一个图像?
答案 0 :(得分:1)
您没有在两次渲染之间清除缓冲区。
如何添加
g.fillRect(0, 0, buffer.getWidth(), buffer.getHeight());
在调用g.setColor(Color.RED); g.fillOval...
之前使用您的背景颜色(黑色?)?
答案 1 :(得分:1)
看起来你不会在绘制之间清理缓冲区图像。您可以通过将代码更改为:
来测试 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);
之后绘制红色球并将其擦拭为绿色,这样你就会看到一个红色的球留下一条绿色的小道。用背景颜色替换绿色就可以了。