【发布时间】:2012-03-22 00:43:55
【问题描述】:
我正在用 Java 制作一个简单的棋盘游戏,我想在其中制作掷骰子的动画。所以我闪现这样的骰子图片:
public Timer roll_dice = new Timer(50, this);
...
public void actionPerformed(ActionEvent evt) {
if(roll_dice.getDelay() > 500){
roll_dice.setDelay(50);
roll_dice.stop();
movePiece();
}else{
roll_dice.setDelay(roll_dice.getDelay() + 50);
dice_panel.repaint(0);
}
}
}
movePiece(){
//do some more painting
}
所以骰子会随机显示几次,然后慢慢确定一个数字。完成后我想调用movePiece() 方法。然而,实际上,重绘偶尔会发生,并且会搞砸一切,因此在掷骰子实际完成动画之前调用movePiece()。
有没有人知道我如何在最终重绘发生后才调用 movePiece?
【问题讨论】:
-
您应该避免让程序逻辑依赖于绘画,因为您无法完全控制绘画何时甚至是否会发生。与其重绘图像并调用
repaint(),不如在程序启动时简单地将掷骰子图像放入ImageIcons,然后在Swing Timer 中交换JLabel 中的图标?然后当延迟足够长时停止你的计时器,如果阻塞,移动你的棋子。