【问题标题】:Double Buffering with awt使用 awt 进行双缓冲
【发布时间】:2011-02-20 04:21:12
【问题描述】:

是否可以使用 awt 进行双缓冲(在 java 中)?目前,我知道swing不应该与awt一起使用,所以我不能使用BufferStrategy之类的(我已经有一些用awt编写的代码,我不想在swing中重写)。

如果使用 awt 可以进行双缓冲,我是否必须手动写入缓冲区?与 swing 不同,awt 似乎没有相同的内置双缓冲能力。

如果我必须手动编写代码,有没有好的教程可以看?或者对于新手程序员来说使用 swing 更容易/更可取?

很抱歉这个多步骤问题。谢谢你的时间:)

【问题讨论】:

    标签: java swing awt doublebuffered


    【解决方案1】:

    这在网络上很容易回答。只需搜索“双缓冲 awt”,您就会发现很多示例。你甚至可以看到an old example 我自己在 1998 年用 Java 1.0 AWT 编写的。您只需要实例化您自己的 Graphics 对象并绘制到图像,然后将该图像blit 到画布中。这是我的示例中的关键代码:

      public void paint(Graphics g) {
        if (doubleBuffer) {
          paintSky(top.gBuf);
          g.drawImage(top.buf, 0, 0, this);
        } else {
          paintSky(g);
        }
      }
    

    【讨论】:

    • 我会说,如果可能的话,建议重用 swing 实现。
    • 天哪,我无法运行代码,因为没有 newStuff() 方法。 D:
    • @DDP:嗯,这很奇怪。显然我已经十年没有尝试编译该代码了...编译后的代码在这里作为小程序运行:astro.wisc.edu/~dolan/java/Constellations.html 所以我链接的源代码一定不是正确的版本。
    • 好吧,我还是看看你的源代码(其他一切似乎都井井有条)。非常感谢克里斯多兰的指点:D
    最近更新 更多