OK所以这里是我的代码:http://www.so.pastebin.com/Qca4ERmy的Java Applet缓冲图像
我试图使用缓冲区,这样的小应用程序不会侵犯的重绘()闪烁但似乎我有麻烦。小程序仍然闪烁...
帮助?
谢谢。
我做了关于这个问题的一个快速的视频:http://www.vimeo.com/12035196
OK所以这里是我的代码:http://www.so.pastebin.com/Qca4ERmy的Java Applet缓冲图像
我试图使用缓冲区,这样的小应用程序不会侵犯的重绘()闪烁但似乎我有麻烦。小程序仍然闪烁...
帮助?
谢谢。
我做了关于这个问题的一个快速的视频:http://www.vimeo.com/12035196
我做过的最好的方法是创建与您的小程序大小相同的另一个图像,然后在绘图/更新方法中将该图像的内容复制到您的图形对象。您必须确保在绘制到小程序时不会更新其他图像,否则会导致闪烁。绘图应该可能在另一个线程中完成,只是为了使事情变得更容易理解。
我没有访问我的代码,所以下面可能有点过(并且代码可能不是最有效的):
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
您可以尝试使用BufferedImage
来解决这个问题,这样你只需创建一个BufferedImage
与您的帧兼容然后块传输之前画样样有整个图像放到JFrame
的内容上。
更好的方法是使用BufferStrategy
类的自动缓冲,您可以阅读关于它的教程here。
创建一个Swing小程序。 Swing默认是双缓冲,所以你不应该有这个问题。从Swift教程How to Make Applets中的部分开始,了解创建Swing小程序的正确方法。
我尝试添加createBufferStragtegy ..但我得到的是: C:\用户\丹\文档\ DanJavaGen \ tileGen.java:39:找不到符号 符号:方法createBufferStrategy(INT) location:class tileGen createBufferStrategy(2); 我有正确的进口... – nn2 2010-05-26 01:15:47