更新图形时jframe闪存

时间:2016-01-12 04:01:39

标签: java graphics

在下面,我制作可再生图形的代码显示了生活游戏本身。

public paint(Graphics g)
{
     g.setClip();//Set              
     g.setColor(Color.BLACK);

     Processing.....

     while(true)
     {
          g.clearRect();//Clear

          g.drawLine(); //Draw;

          Calling SwingWorking to prepare next statement
     }
}

这样做似乎很愚蠢,因为在运行它时,框架会一直闪烁和滞后。 我尝试使用Thread.sleep(),但这只会减慢闪光的频率。

所以,我的问题是如何做好并避免闪烁。 我没有提到的代码部分都是关于实例变量的数据处理,如果你需要它,请注意我,非常感谢你的帮助。

谢谢,@ MadProgrammer

这是我得到的, 首先,flash是因为当程序调用repaint()和paint()时,动画制作成本太高,在这种情况下是clearRect()和drawLine()。

我将使用双缓冲来解决它。

更新

谢谢你们,我读了这些例子。我只是使用没有任何缓冲方法的帧来显示图形,这是一个错误。我使用bufferStrategy来解决它。

1 个答案:

答案 0 :(得分:1)

不是答案,而是演示

  

制作动画片需要花费太多时间

对我而言,这意味着您无法理解API的工作原理,如果您愿意,可以使用Swing做一些复杂的动画。

前段时间我创建了一个"动画序列"引擎,它拍摄了一系列图像并将它们混合在一起

此示例使用5个单独的图像/图层(顶部有绘制效果)

Layers

每一层都有不同的速度"这样它们就可以在动画的基准时间内以不同的速度移动(例如,速度为1将导致图层在序列的基本持续时间内仅旋转一次,在本例中为20秒)

原始图像均为1024x256,因此尺寸不大

Sequence

添加一个序列正在透明窗口中播放,添加了一个alpha效果(在边缘处流血),这不是一个简单的动画。

gif以粗糙的8fps播放,实际动画以大约200fps的速度运行

(对不起,这段代码很大,并且使用了许多其他库,比如Timing Framework,因此无法发布)

我的观点是,问题不在于单独的API(Swing / Graphics),而在于您如何使用它

有关更多示例,请查看:

并且大多数这些示例甚至都没有尝试任何主要的优化或其他性能技术

您还应该查看Painting in AWT and SwingPerforming Custom Painting,了解有关绘画过程如何运作的详细信息