提问者:小点点

更新图形时jframe flash[关闭]


编辑问题以包括所需的行为、特定的问题或错误以及重现问题所需的最短代码。这将有助于其他人回答问题。

在下面,它是我的代码,使可再生图形显示生活游戏本身。

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.睡眠(),但它只是减慢了闪存的频率。

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

谢谢,@MadProgrammer

这是我得到的,首先,flash是因为当程序调用repaint()和油漆()时,它花费了太多的时间来平滑地制作动画,在这种情况下是clearRect()和DrawLine()。

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

更新,

谢谢大家,我读了那些例子。我之前只是使用没有任何缓冲方法的帧来显示图形,真是个错误。我使用了缓冲策略来解决它。


共1个答案

匿名用户

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

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

不久前,我创建了一个“动画序列”引擎,它拍摄了一系列图像,并在彼此之上制作动画

此示例使用5个独立的图像/图层(在顶部放置油漆效果)

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

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

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

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

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

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

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

  • 摇摆动画运行极慢
  • 慢速移动,使用画笔组件方法
  • 旋转多个图像导致闪烁。JavaGraphics2D

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

您还应该看看在AWT中绘画和摇摆和执行自定义绘画,了解有关绘画过程如何工作的更多详细信息