【发布时间】:2015-09-26 21:40:16
【问题描述】:
我目前正在使用我设计的动画引擎,该引擎采用 Drawable 类型的对象并将它们添加到列表中。 Drawable 是一个只有一个方法的接口:
public void draw(Graphics2D g2d);
扩展动画管理器遍历这个列表,并在每个对象上调用 draw() 方法,传递从 Swing 组件获得的 Graphics2D 对象。
这个方法一开始似乎效果很好,但正如我担心的那样,从长远来看,它似乎无法处理多个对象。
仅注册了两个 Drawable,两个都在屏幕上绘制图像,我看到 30-60 秒后有点闪烁。
有没有办法优化这个方法?它当前调用 AWT 线程 (invokeLater) 来处理所有任务。并发绘图并不是一个真正的选项,因为这几乎总是会导致 Swing/AWT 出现问题,这在很大程度上是由于图形不同步。
如果这只是一种糟糕的动画制作方式,那么当您有多个对象都需要使用自己的特定变量渲染的东西时,有什么更好的方法咳嗽游戏咳嗽?
任何帮助将不胜感激。谢谢!
编辑:
我不能使用 repaint() 因为我的引擎已经调用了 AWT 线程来绘制东西。如果我从 AWT 线程调用 invokeLater,则由于某种原因,图像永远不会被绘制。
我还应该补充一点,我正在使用刻度和 fps 系统。 60 滴答声 @ 120 fps。
每个滴答都会更新游戏逻辑,而每个帧渲染调用都在帧管理器上绘制。
这是个坏主意吗?我应该只使用 FPS 而不是滴答声吗?
【问题讨论】:
标签: java swing animation graphics