好的,这是我的代码:http://www.so.pastebin.com/Qca4ERmy
我正在尝试使用缓冲区,因此applet不会在重绘()时闪烁,但似乎我遇到了麻烦。小程序仍在闪烁......
帮助?
谢谢。
我制作了一个关于此问题的快速视频:http://www.vimeo.com/12035196
答案 0 :(得分:3)
创建一个Swing小程序。默认情况下,Swing是双缓冲的,因此您不应该遇到此问题。从How to Make Applets上的Swing教程中的部分开始,了解创建Swing applet的正确方法。
答案 1 :(得分:2)
您可以尝试使用BufferedImage
来解决此问题,这样您只需创建一个与您的框架兼容的BufferedImage
,然后在将整个图像blit到{{{ 1}}的内容。
更好的方法是使用JFrame
类自动缓冲,您可以阅读有关它的教程here。
答案 2 :(得分:2)
我做的最好的方法是创建另一个与applet大小相同的图像,绘制到那个,然后在paint / update方法中将该图像的内容复制到图形对象。您必须确保在绘制到applet时不更新其他图像,否则会导致闪烁。绘图也应该在另一个Thread中完成,只是为了让事情更容易理解。
我无法访问我的代码,因此以下内容可能有点不合适(代码可能效率最低):
public class MyApplet extends Applet {
Image offscreen;
boolean pageFlipped = false;
Thread drawingThread;
public void init() {
offscreen = createImage(this.getWidth(), this.getHeight());
drawingThread = new Thread(new DrawingLoop());
drawingThread.start();
}
public void update(Graphics g) {
paint(g);
}
public void paint(Graphics g) {
if (!pageFlipped) {
g.drawImage(offscreen, 0, 0);
pageFlipped = true;
}
}
class DrawingLoop implements Runnable {
public void run() {
while (true) {
Graphics g = offscreen.getGraphics();
if (pageFlipped) {
// do your graphics code here
pageFlipped = false;
}
}
}
}
}
希望这有帮助!
-Dan