【问题标题】:Java JApplet Graphics Double BufferingJava JApplet 图形双缓冲
【发布时间】:2011-03-20 22:26:10
【问题描述】:

我正在用 Java 编写一个非常简单的游戏,当我在浏览器中将游戏作为小程序玩时,我遇到了非常严重的闪烁问题。也就是说,在背景上绘制的所有精灵有时会显示在屏幕上,但通常不会显示 - 它们重复地在屏幕上闪烁然后消失。我已经读过双缓冲可能是解决这个问题的方法,但我无法正确实现它。

我使用 JApplet 作为 JPanel 的容器。这个 JPanel 是在其上绘制精灵和游戏对象的容器——也就是说,在 JPanel 的 paintComonent 方法中。在我的 JApplet 中,我使用 init、paint 和 update 覆盖方法,如下所示:

Image offscreen;

Graphics bufferGraphics;

Dimension dim;

public void init(){
    dim = getSize();

    setBackground(Color.BLACK);

    offscreen = createImage(dim.width,dim.height);

    bufferGraphics = offscreen.getGraphics();

}

public void paint(Graphics g){
    bufferGraphics.clearRect(0,0,dim.width,dim.height);
    //here is my question - i"m not sure what I should print to bufferGraphics
    g.drawImage(offscreen, 0, 0, this);
}

public void update(Graphics g){
    paint(g);
}

我遇到的问题是,在注释行中,我不确定如何将当前的小程序图像打印到 bufferGraphics。我阅读了example,其中精灵直接绘制到 JApplet,而不使用 JPanel。鉴于此,我的猜测是我需要在注释行将 JPanel 绘制到 bufferGraphics 上。我在正确的轨道上吗?任何帮助是极大的赞赏;我只是想知道如何正确地做到这一点。

【问题讨论】:

  • 重新格式化的代码,如果不正确则恢复。

标签: java swing applet jpanel


【解决方案1】:

Swing默认是双缓冲的,不需要特别做。

您的问题可能是绘画代码。您发布的代码用于 AWT 绘画,而不是 Swing 绘画。

自定义绘制是通过覆盖 JPanel 或 JComponent 的 paintComponent() 方法来完成的。我建议您首先阅读 Custom Painting 上的 Swing 教程以获取工作示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 2016-10-10
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    相关资源
    最近更新 更多