Итак, кубик собирается, так что покажите случайные числа несколько раз, а затем медленно выбирайте число.После этого я хотел бы вызвать метод movePiece ().Однако, так как это, перерисовка происходит спорадически и все перепутывает, так что movePiece () вызывается до того, как бросок игральных костей на самом деле заканчивает анимацию.
Что меня беспокоит, так это то, почему ваша картина происходитвремя от времени - просто не следует этого делать, и возможно , что - это то, что вам нужно исправить.Интересно, читаете ли вы изображения из файла каждый раз, когда выполняете рисование, или по какой-либо другой причине для замедления рисования.Если вам нужна дополнительная помощь по этому вопросу, вам нужно будет предоставить нам больше информации о том, как вы рисуете.В любом случае, вы должны избегать зависимости логики программы от рисования, поскольку у вас нет полного контроля над тем, когда или даже будет происходить рисование.
Вместо того, чтобы перерисовывать изображения и вызывать repaint (), почему бы просто не помещать изображения с вращающимися кубиками в ImageIcons при запуске программы, а затем в таймере Swing поменять значки в JLabel?Затем остановите ваш таймер, когда задержка станет достаточно большой, и в этом случае, если блок переместит вашу фигуру.
Итак, при условии, что у вас есть несколько кубиков, каждый может быть отображен с помощью JLabel, который содержится в массиве JLabel.называется diceLabels, и ImageIcons может храниться в массиве под названием diceIcons.Тогда вы можете сделать что-то вроде:
public void actionPerformed(ActionEvent e) {
if (roll_dice.getDelay() > 500) {
roll_dice.setDelay(50);
roll_dice.stop();
movePiece(); // I like this -- this shouldn't change
} else {
roll_dice.setDelay(roll_dice.getDelay() + 50);
// dice_panel.repaint(0);
for (JLabel dieLabel : diceLabels) {
int randomIndex = random.nextInt(diceIcons.length);
dieLabel.setIcon(diceIcons[randomIndex]);
}
}
}
Мне нравится ваша логика, когда вы звоните movePiece()
, и я думаю, что это должно остаться без изменений.