【问题标题】:jframe flash when updating graphics [closed]更新图形时jframe闪烁[关闭]
【发布时间】:2016-01-13 09:42:54
【问题描述】:

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

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(),但它只是减慢了flash的频率。

所以,我的问题是如何做好并避免闪烁。 代码部分我就不放了,都是关于实例变量的数据处理,如果你需要的话,请通知我,非常感谢帮助。


谢谢,@MadProgrammer

这是我得到的, 首先,flash是因为程序调用repaint()和paint()时,为了使动画流畅,花费了太多时间,这里是clearRect()和drawLine()。

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


更新,

谢谢大家,我阅读了这些示例。之前我只是用一个没有任何缓冲方法的frame来显示图形,大错特错。我使用 bufferStrategy 来解决它。

【问题讨论】:

标签: java graphics


【解决方案1】:

不是答案,而是演示

制作流畅的动画花费了太多时间

对我来说,这意味着你不了解 API 是如何工作的,如果你愿意的话,你可以用 Swing 做一些复杂的动画。

不久前,我创建了一个“动画序列”引擎,它拍摄了一系列图像并将它们叠加在一起进行动画处理

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

每个图层都被赋予不同的“速度”,因此它们在动画的基本时间范围内以不同的速度移动(例如,速度为 1 将导致图层在序列的基本持续时间内仅旋转一次,在本例中为 20 秒)

原图都是1024x256,所以大小不合适

除了在透明窗口中播放的序列之外,还添加了 alpha 效果(边缘渗出),这不是一个简单的动画。

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

(抱歉,这个代码非常大,并且使用了许多其他库,例如 Timing Framework,所以无法发布)

我的意思是,问题不在于 API (Swing/Graphics) 本身,而在于您如何使用它

有关更多示例,您可以查看:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    相关资源
    最近更新 更多