【发布时间】:2015-09-06 13:42:34
【问题描述】:
我正在尝试编写一个使用 MVC 模式为对象(鱼、气泡、鲨鱼等)设置动画的程序。
模型有一个带有 x 和 y 值的对象的 LinkedList。 视图具有启动和停止动画的按钮。 我在视图中的 JFrame 中添加了按钮和 Jpanel。 但我不确定如何绘制/动画我的对象。视图如下所示:
public class View extends JFrame {
.
.
.
this.add(paintingSheet, BorderLayout.CENTER);
.
.
.
}
public class PaintingSheet extends JPanel {
private Image background;
public PaintingSheet() {
this.background = Toolkit.getDefaultToolkit().createImage("src/resources/background.jpg");
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(this.background, 0,0, this);
}
}
我的计划是在控制器中创建一个线程来更新模型中的对象并重新绘制它们。 像这样的:
Model.updateOjects;
View.PaintingSheet.repaint();
Thread.sleep(x);
1) 是否允许在视图外的线程中调用重绘?
2) 有更好的方法吗?
3) 我如何使用模型中更新的 LinkedList 调用重绘?
4) 我怎样才能从重新绘制的蜜蜂中排除背景(它不移动)?
谢谢
【问题讨论】:
-
我建议在调用您的绘制方法时计算对象的当前位置。这将使您的动画更流畅,而不是重复更新模型。 (只有在计算能够真正快速完成的情况下才有可能)
标签: java swing animation paintcomponent thread-sleep