Rez*_*Rez 5 java swing flicker japplet
这个问题很奇怪.每个平台上都不会出现此问题.我在谷歌浏览器中使用MacOSX,但在Safari中不会出现这种情况.对于使用Windows的朋友,在Google Chrome上它可以完美运行.我还有一个使用MacOSX的朋友,对他而言,它在Chrome,Safari和Firefox上闪烁.我们都有MacOSX Lion.我没有看到任何链接.你们有人可以测试它并报告它是否发生,你的平台是什么(最多应该在30秒内发生)?
我在Oracle的论坛上找到了这个帖子.显然,这是MacOSX上一个众所周知的问题,因为Java创建了一个子进程而Safari不允许将其作为安全功能.然而,问题也发生在Mac上的Chrome和Firefox中(并不像我这样在Safari上).去图......我很高兴听到有人对此发表意见.
我目前正在制作一个小型的Java Tetris游戏,我的问题是屏幕偶尔会在applet版本中闪烁(扩展JApplet).当我在计算机上的JFrame中运行它时,一切正常.
applet可以在这个网站上查看和使用:http://mtetris.herokuapp.com/(我不是试图宣传或宣传任何东西,我只是把它放在人们可以真正看到问题所在的位置).
(还有一个问题是applet没有自动加载时没有正确地获得鼠标焦点 - 即当浏览器阻止它并询问用户是否允许加载它时.如果"开始级别"数字没有正确突出显示,这就是原因.)
以下是我尝试过但没有修复闪烁问题的事情:
paint()
方法并在其中进行双缓冲(我在当前代码中注释了这部分,因为它没有改进任何东西)update()
方法并直接调用paint()
它(此问题现已根据官方文档中的方法说明修复)整个源代码可以在此页面的 github上找到.扩展JApplet的类是TetrisApplication.源代码还不是很干净,所以,对不起.
这就是我实现双缓冲的方式
public class TetrisApplication extends JApplet {
// the dimension of the applet
private Dimension dimension;
// image used for double buffering
Image offscreen;
// the second buffer
Graphics bufferGraphics;
public void init() {
super.init();
dimension = getSize();
offscreen = createImage(dimension.width, dimension.height);
bufferGraphics = offscreen.getGraphics();
...
}
public void paint(Graphics g){
bufferGraphics.clearRect(0, 0, dimension.width, dimension.height);
super.paint(bufferGraphics);
g.drawImage(offscreen, 0, 0, this);
}
...
}
Run Code Online (Sandbox Code Playgroud)
要停止滑动,您需要对绘图表面进行双缓冲。您确定您第一次正确实施了吗?
归档时间: |
|
查看次数: |
1578 次 |
最近记录: |