1

我最近的一项 Java 作业(高中课程......)是制作一个小程序,在该小程序中绘制一个边框,一个球在屏幕上移动并在边框上弹跳。我安装了 Fraps,它报告说该小程序仅以 10 fps 的速度运行,这使得动画看起来非常平庸。

我绘制动画的原始方式:

  1. 调用我的方法:drawScreen()paint()
  2. 暂停帧速率Thread.sleep(1000/frameRate)drawScreen()这是从html
  3. 称呼repaint()

这工作得非常好,小程序像梦一样运行......直到我看到评分表,上面说我不能每次都重新绘制屏幕(可能是因为计算机异常缓慢,我的朋友一直在抱怨他们的小程序闪烁足以引起眼睛不适,并且到处流泪),我必须画一个球,然后再画一个与背景相同颜色的球来覆盖它,计算坐标,重复直到小程序退出

问题在于

  • repaint()不能叫
  • 我的动画上限为 10 fps
  • 没有可用的线程来响应我单击appletviewer 上的关闭,或applet/viewer 中的任何其他内容。

有没有办法让我的动画在不使用 10 fps 的情况下运行repaint()

4

2 回答 2

3
  1. 不:
    1. 在顶级容器中执行自定义动画,例如Applet(/ JAppet) 或Frame(/ JFrame)。而是将自定义绘图放在Canvas/PanelJComponent/JPanel中,然后将该组件放入顶级容器中。
    2. 在这个千年中使用 AWT 组件。
    3. 覆盖paint()Swing 组件 - 它应该是paintComponent(Graphics).
  2. 请勿Thread.sleep(n)在绘画线程上使用。而是使用 SwingTimer并采取行动..
  3. 打电话repaint()
于 2011-11-01T04:55:02.420 回答
0

结果我需要实现双缓冲或在双缓冲浏览器中运行小程序。AppletViewer 将动画限制为 10 fps,因为它不会自动缓冲小程序,而我一直在其中运行小程序。

于 2011-11-05T17:47:30.217 回答