Jor*_*ori 10 java windows java-2d game-development
好的,我理解你需要一个SSCCE,所以我创建了(我的第一个).
我设法用200行代码复制问题.在我的系统上,这个演示编译并运行完美(当然只有闪烁仍在那里).我剥夺了与它无关的所有东西.所以基本上我们现在有两个源文件:屏幕管理器和游戏管理器.
屏幕管理员:http: //pastebin.com/WeKpxEXW
游戏经理:http: //pastebin.com/p3C5m8UN
你可以使用这个make文件编译这段代码(我使用的是移植版本的Linux'make for Windows):CC = javac BASE = nl/jorikoolstra/jLevel CLASS_FILES = classes/$(BASE)/Game/GameMain.class classes/$ (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
Run Code Online (Sandbox Code Playgroud)
源文件放在/src
目录和目录中的类中/classes
.
在编译为字节码后,可以使用以下.bat文件启动游戏:
@set STARUP_CLASS=nl.jorikoolstra.jLevel.Game.GameMain
@set ARGUMENTS=1280 1024 32
@java -cp classes;resources %STARUP_CLASS% %ARGUMENTS%
Run Code Online (Sandbox Code Playgroud)
请注意,ARGUMENT
变量取决于您自己的屏幕设置,您必须更改它,以便以适合您屏幕的分辨率显示游戏.
我明白为什么它会闪烁----
BufferStrategy
从Component的paint()
方法做一个单独的绘画工作,他们似乎使用不同的Graphics
对象,他们以不同的速度刷新 -
什么时候paint()
被调用show()
,没关系.但
在paint()
之后调用时show()
,它会将组件重新绘制为其初始空白外观 - 因此闪烁发生.
很容易消除闪烁:paint()
你的JFrame
(GameMain
)的覆盖方法,因为你不需要它做任何事情(BufferStrategy
可以让你更精确地控制绘画的东西):
@Override
public void paint (Graphics g) {}
Run Code Online (Sandbox Code Playgroud)
就这样.(我测试了它,它工作正常,希望这可能有帮助:))
而不是覆盖paint()
方法,更好的方法是调用setIgnoreRepaint(true)
你的JFrame
(GameMain
) - 这个方法只是为这样的目的而设计的!使用它!
private GameMain(String ... args)
{
setIgnoreRepaint(true);
.....
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7569 次 |
最近记录: |