2011-09-27 123 views
3

我正在用Java编写游戏。而且,哦,不知道,我有性能问题。我对油漆本身进行了基准测试 - 在3毫秒的时间内进行1000次循环。游戏逻辑甚至低于此。到现在为止还挺好。但是我仍然遇到一个烦人的滞后:滚动时,缩放时,点击时。当我放大并放置更多对象时,问题会变得更糟。但仍然 - 即使当我循环绘画1000次滞后停留或多或少是相同的,所以不能这样做。 我试图把循环放在一个任务 - 仍然是一样的。我尝试暂停涂料之间的任务 - 仍然是一样的。 动画像丝绸一样流畅运行(因为帧率稳定且高,这很有意义)。那么我怎样才能有条不紊地组织投入?把他们全部放在一个单独的线程? 任何输入,将不胜感激!Java游戏滞后

+4

以3ms为单位进行1000个循环。你确定?这是333000 fps。 – toto2

+2

当您“暂停涂料之间的任务”时,您确定没有暂停整个Swing(或AWT)事件线程吗? – toto2

+0

现在,你提到它333000fps听起来有点多...肯定我得到了错误;) – julian

回答

9

听起来好像你正在使用监听器回调直接在UI更新正在完成的Swing Event Dispatch Thread上。您应该使用命令队列,并在调用回调时将事件放入队列中,并使用命令的性质,然后在与EDT没有任何关系的主游戏更新循环中使用它。

+0

我现在不能尝试,但这实际上应该做的伎俩。谢谢! – julian

+1

试了一下,工作卢克魅力。百万倍感谢你! – julian