2010-01-20 67 views
0

我正在做一个java游戏。在一些常规毫秒后,我正在重新绘制屏幕。 但是,如果计时器的持续时间变得非常少,那么在这种情况下屏幕开始闪烁。为了避免计时器上的scren闪烁java

有什么办法可以避免它?

我们可以使用多线程来避免这种情况吗?

回答

1

你可以使用双缓冲。

这里是一个“双缓冲与Java”教程:Double Buffering and Page Flipping

多线程不能单独解决这个问题......

当你重绘
+0

我刚刚听说过它..它避免了闪烁。但我不知道如何实现它。你能建议我如何在java中实现它? – 2010-01-20 12:35:03

+0

使用我贴的链接:-) – 2010-01-20 12:36:02

1

,你会被清除之前重绘整个画布出现的闪烁。如果您可以通过将相同的形状与背景颜色叠加来仅清除画布上以前绘制的部分,则可以避免闪烁。这只是一个可能的解决方案。

2

检查出this tutorial,它解释了如何使用加速图形模式和双缓冲来避免屏幕闪烁。关键概念是建立一个BufferStrategy管理双缓冲:

// create the buffering strategy which will allow AWT 
// to manage our accelerated graphics 
createBufferStrategy(2); 
strategy = getBufferStrategy(); 

然后,使您获得图形从缓冲策略对象中,使用Graphics进行绘制,然后调用strategy.show()

// Get hold of a graphics context for the accelerated 
// surface and blank it out 
Graphics2D g = (Graphics2D) strategy.getDrawGraphics(); 
g.setColor(Color.black); 
g.fillRect(0,0,800,600); 

g.dispose(); 
strategy.show(); 
1

其可被用来减少在动画画面闪烁的技术是使用double buffering。通过具有执行绘图操作的离屏目的地,并且只有当离屏绘图准备好显示时才会将其绘制到物理屏幕,从而实现双缓冲。

多线程不是解决方案,因为GUI由AWT和Swing中的单个线程管理。

-1

确保您使用的是EDTjavax.swing.Timer的一个实例使得这很容易,因为动作事件处理程序在EDT上执行。即使在高帧速下,我也看不到默认缓冲策略的闪烁,如here所示。