java双缓冲问题
我的小程序代码没有正确呈现双缓冲区,有什么问题吗?我正在尝试 我正在努力。但是没有找到解决办法。请告诉我我的代码出了什么问题java双缓冲问题,java,Java,我的小程序代码没有正确呈现双缓冲区,有什么问题吗?我正在尝试 我正在努力。但是没有找到解决办法。请告诉我我的代码出了什么问题 import java.applet.* ; import java.awt.* ; import java.awt.event.* ; public class Ball extends Applet implements Runnable { // Initialisierung der Variablen int x_pos = 10;
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);
}
}
我应该做什么更改。绘制屏幕外图像时,上一个图像也会保留在屏幕上。如何从屏幕上删除上一个图像 您没有清除两个渲染之间的缓冲区 加进去怎么样
g.fillRect(0, 0, buffer.getWidth(), buffer.getHeight());
在调用
g.setColor(color.RED)之前,使用背景色(黑色?);g、 Fillova…
?看起来您没有在绘图之间清理缓冲区图像。您可以通过将代码更改为:
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);
这会吸引红色的球,然后把它擦成绿色,所以你会看到一个红色的球留下一条绿色的轨迹。用背景色替换绿色就可以了。对于初学者,你可以停止发布10个空方法的示例代码。嗨,russel。你只接受了29个问题中的33%。您是否真的收到了20个问题的无法使用的答案?请回顾这一点,并用更详细的信息替换你文章中的“plz-plz-plz-plz”。然后你可能会有更好的机会得到答案。好的,我发现了我的问题。我创建了一个新的图像缓冲区=createImage(w,h);在'screen.drawImage(缓冲区,0,0,this);'然后清理问题解决了。但是现在又出现了另一个问题,我的移动球也在闪烁。所以我想知道这里是否执行了双缓冲。如何检查,任何人都可以帮助??我应用了你的建议,但问题仍然是一样的。事实上,g.setColor(Color.green);这是因为打字错误。应该是注释。问题是屏幕上保留了上一张图片/新写的图片位于上一张图片上,而不是空白图片。如何解决这个问题???@russell,我的建议用另一种颜色覆盖了红色球,因此下一次迭代不应该显示它(使用绿色留下轨迹,使用背景色隐藏球)创建新缓冲区图像的解决方案等同于使用默认颜色覆盖图像。您的问题可能是因为在使用非透明颜色清除图像时背景是透明的吗?我无法理解您的疑问!!,但这不是问题。因为我终于能够通过设置>>scr来消除闪烁een.drawImage(缓冲区,0,0,这个);到屏幕。drawImage(缓冲区,0,0,null);thanx非常感谢您的帮助。希望下次您也能帮助我。我使用了它,但问题仍然是一样的。球仍然随着尾巴移动。我不知道我还能做什么!!!