我正在使用 Java Swing 制作游戏,我意识到在游戏运行了一段时间后,大约 10 分钟,图形开始滞后很多。游戏循环报告以恒定的 FPS 运行。
现在我有它,所以一旦游戏循环触发,重绘也会被调用。如果我不同步图形,那么在屏幕上可以看到正在绘制的不同部分的速度太慢了。任务管理器显示它使用的内存几乎相同,但是 CPU 使用率会随着时间逐渐增加。如果我不得不猜测,那一定是我没有使用 Swing 来正确绘制。
我目前用于绘图的过程是这样的:
- 投射 graphics2D 对象
- 超级绘制图形对象
- 每个对象都使用该图形对象绘制其图形。
- 工具包同步
- 处理图形
面板是setDoubleBuffered(true)
.
知道什么可能是错的吗?
编辑:
我不能让我的 SSCCE 滞后,所以我回去重新测试每个绘图功能,结果是
int ilen = drawActorQueue.size();
for (int i = 0; i < ilen; i++)
{
GameActor oo = drawActorQueue.get(i);
oo.draw(g2d, viewX, viewY);
}
似乎是造成问题的原因。
我认为这是因为 drawActorQueue 实际上包含指向 2 类对象的指针,而 GameActor 只是基类。
看起来是这样吗?我想我可以通过使用接口来修复它,或者让列表指向 2 个子对象的特定数组。
编辑:!@#$%^ 只是我非常愚蠢并且没有清除列表。当我再次感到疲倦时,我将永远不会编码或调试。