【发布时间】: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 来解决它。
【问题讨论】:
-
JFrame不是双缓冲的,所以我不会覆盖它的paint方法。 -
考虑提供一个runnable example 来证明您的问题。这不是代码转储,而是您正在做的事情的一个例子,它突出了您遇到的问题。这将减少混乱并获得更好的响应
-
基于单个上下文外的代码 sn-p,我建议您首先查看 Painting in AWT and Swing、Performing Custom Painting、Concurrency in Swing 和 How to use Swing Timers导致问题的原因和可能的解决方案的想法
-
" 制作流畅的动画花费了太多时间" - 我有几百个例子可能会提出其他建议。如果您“真的”需要控制绘画过程,那么您将需要使用
BufferStrategy和 BufferStrategy and BufferCapabilities