gpt4 book ai didi

Java图像闪烁

转载 作者:行者123 更新时间:2023-12-02 09:37:10 25 4
gpt4 key购买 nike

从 Google 搜索中我可以看到这个问题被问了很多,但我找到的解决方案都没有为我解决这个问题。我正在用 Java 制作一个带有图像的游戏,你知道,因为游戏通常都有这些东西。但整个表格一直在闪烁,我无法让它停止。是的,我对它进行了双缓冲并覆盖了 update() 方法,虽然这确实有帮助,但闪烁仍然存在。我不知道我是否在双缓冲方面做错了什么,或者我是否需要完全不同的东西。

起初我以为这可能与clearRect()行有关,但删除它后,游戏仍然闪烁,但当然不是每次都被清除。所以这根本没有帮助。减慢计时器速度后,闪烁几乎完全消失,但我需要将其减慢至 100 毫秒,即便如此,我仍然会出现一些闪烁。此外,这对于游戏来说太慢了。我尝试让一个计时器在 10 毫秒的计时器上完成所有操作,并用另一个计时器以 100 毫秒的速度进行绘画,但当时看起来很不稳定。我可以将绘画计时器减慢到大约 30 毫秒,并且仍然平滑,尽管闪烁仍然是一个问题。

必须有一种方法可以每 10-30 毫秒执行一次而不闪烁。是否有其他类似于双缓冲但在这种情况下更好的方法,或者我可以使用的方法?预先感谢您的帮助。

public class main extends JApplet implements ActionListener {
//This Declares The Variables
Graphics2D buffer;
Image offscreen;
Timer timGame = new Timer(10, this);
//other variables

public void init(){
//This Creates The Offscreen Buffer Zone
offscreen = createImage(getSize().width, getSize().height);
buffer = (Graphics2D)offscreen.getGraphics();
//other initialization stuff irrelevant to drawing
}

public void actionPerformed(ActionEvent evt){
if (evt.getSource() == timGame)
runGame();
}

private void runGame(){
//Do stuff, move objects
repaint();
}

public void paint(Graphics g){
super.paint(g);

buffer.clearRect(0, 0, getSize().width, getSize().height);
//draw stuff to buffer
g.drawImage(offscreen, 0, 0, this);
}

public void update(Graphics gr){
paint(gr);
}

最佳答案

不要直接在顶级窗口(例如 JApplet 或 JFrame)的 paint(...) 方法中进行绘制,否则您将失去所有双缓冲和所有 Swing 功能。而是使用添加到 JApplet 的 JPanel 或其他 JComponent 派生组件(包括 JComponent 本身)的 paintComponent(...) 方法进行绘制。

如果您在此处或在 Google 中搜索该主题,您会发现该问题已在本网站和其他网站上被多次询问和回答,而且答案是相同的。

例如

关于Java图像闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10442172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com