gpt4 book ai didi

Java 图形闪烁

转载 作者:可可西里 更新时间:2023-11-01 12:41:32 24 4
gpt4 key购买 nike

好的,我了解您对 SSCCE 的需求,所以我创建了(我的第一个)一个。

我设法用不到 200 行代码复制了这个问题。在我的系统上,这个演示完美地编译并运行(当然只有闪烁仍然存在)。我剥离了一切与它无关的东西。所以基本上我们现在有两个源文件:屏幕管理器和游戏管理器。

屏幕管理器: http://pastebin.com/WeKpxEXW

游戏管理员: http://pastebin.com/p3C5m8UN

您可以使用此 make 文件编译此代码(我使用 Linux 的移植版 make for Windows): 抄送=javac BASE = nl/jorikoolstra/jLevel CLASS_FILES = 类/$(BASE)/Game/GameMain.class 类/$(BASE)/Graphics/ScreenManager.class

jLevel: $(CLASS_FILES)
@echo Done.

classes/%.class : src/%.java
@echo Compiling src/$*.java to $@ [command: $(CC) src/$*.java ] ...
@$(CC) -Xlint:unchecked -d classes -classpath src src/$*.java

源文件在/src目录下,类在/classes目录下。

编译成字节码后,可以使用以下 .bat 文件启动游戏:

@set STARUP_CLASS=nl.jorikoolstra.jLevel.Game.GameMain
@set ARGUMENTS=1280 1024 32
@java -cp classes;resources %STARUP_CLASS% %ARGUMENTS%

请注意,ARGUMENT 变量取决于您自己的屏幕设置,您必须更改它,以便游戏以适合您屏幕的分辨率显示。

最佳答案

我明白它为什么闪烁了----

BufferStrategy 正在从组件的 paint() 方法中进行单独的绘画工作,它们似乎使用不同的 Graphics 对象并且它们正在刷新以不同的速度--

paint()show() 之前调用时,没问题。但是

当在 show() 之后调用 paint() 时,它会将组件重新绘制为其初始的空白外观——因此会发生闪烁。


消除闪烁很容易:重写 JFrame (GameMain) 的 paint() 方法,因为您不需要它做任何事情(BufferStrategy 可以让你更精确地控制绘画的东西):

@Override
public void paint (Graphics g) {}

就是这样。 (我已经测试过了,它工作正常,希望这可能会有所帮助:))


===== 更新=====

代替重写 paint() 方法,更好的方法是为您的 JFrame (GameMain )——这个方法就是为这样的目的而设计的! 使用它!

private GameMain(String ... args)
{
setIgnoreRepaint(true);
.....
}

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

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