我正在用java製作一個簡單的棋盤遊戲,我想在這裏製作一個擲骰子的動畫。所以我閃骰子的圖片是這樣的:僅在Java Swing中重繪後觸發事件?
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?
您應該避免讓程序邏輯依賴於繪畫,因爲您無法完全控制何時甚至是否出現繪畫。爲什麼不簡單地將滾動的骰子圖像放入ImageIcons中,而是在程序啓動時,然後在Swing Timer中,交換JLabel中的圖標,而不是重繪圖像並調用repaint()。然後停止你的計時器,當延遲時間足夠長時,如果阻止,移動你的作品。 – 2012-03-21 16:26:44