我需要主线程阻止特定的时间。我目前正在开发一款2D游戏,而且只是因为 Thread.sleep(2)睡眠时间约为17秒,并且当你移动角色时,图形会略微滞后。有时候它运行得很好(当我运行应用程序大约10次时),有时它不是。我知道 Thread.sleep(长毫秒)方法存在延迟,但是有什么方法可以避免它或替代方法吗?我已经尝试过 LockSupport.parkNanos((long)2e6),但这并未改变任何内容。
答案 0 :(得分:0)
你提到图形,所以我假设你使用的是Swing of JavaFX。阻止UI线程通常是一个坏主意,因为它必须为你抽象出很多工作。
如果您使用的是Swing,请查看java.swing.Timer
。并确保您在event dispatch thread (EDT)中运行,而您正在使用它: - )。
答案 1 :(得分:0)
你正在寻找的是游戏循环'图案。 这很好地解释了...... http://www.java-gaming.org/index.php/topic,24220.0
答案 2 :(得分:0)
如果您希望自己的游戏具有响应能力,则应将逻辑和图形渲染委托给不同的线程。在一个线程中运行所有内容使得此应用程序在计算Thread.Sleep()效果时非常难以预测。
另外请说明您使用的是什么,AWT,Swing,JavaFX?如果使用AWT,渲染流畅的动画可能会出现严重问题。我建议从Swing开始,即使是非常基本的游戏/动画。
关于运行线程,我最喜欢的是:
Thread thread
和boolean flag
try { while(flag) { refresh(); Thread.sleep(10) } }
flag=true
并启动内部线程thread = new Thread(this).start()
flag=false
这允许您在逻辑线程中正确且轻松地启动和停止动画(没有Thread.Abort()等)