我目前正在创建一个四人连线游戏来玩,当我决定添加一个下降动画会很酷时,我就快完成了。我知道有几种不同的方法可以做到这一点,但我不确定什么是“最好的”。
因为我的 GUI 是由 JComponents 组成的,所以我想我应该使用它javax.swing.Timer
来保证线程安全。
ActionListener update = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
};
};
Timer timer = new Timer(10, update);
timer.start();
我真正的问题是我应该怎么做才能更新我的游戏板?repaint()
调用(甚至可能repaint(Rectangle rec)
)并处理其中的所有内容paint()
或为连接四部分创建另一个类并将该组件添加到我的 GUI会更好吗?
我的连接四件套的另一类目前是这个......
public class Piece extends JLabel{
private Color color;
private Ellipse2D circle;
public Piece(Color color, int radius) {
this.color = color;
circle = new Ellipse2D.Float(0, 0, radius, radius);
}
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
super.paintComponent(g2);
g2.setColor(color);
g2.fill(circle);
}
}
如果我将组件添加到 GUI,我将不得不经常调用invalidate()
,validate()
因为我目前拥有的计时器很快,而且我不确定这是否比调用repaint()
.
这两种方法我都试过了,似乎都可以正常工作,我只是不确定哪种方法更有效?为了学习的目的,我宁愿不要让它变得更繁重。
另外,如果有比我想象的更好的方法,请告诉我。我愿意接受所有建议