Я делаю игру на Java, а метод repaint()
ошибочно работает очень странно. В принципе, мне нужно перекрасить доску, прежде чем перейти к движению ИИ. Вот мой метод, где я звоню его:Метод перетаскивания не работает вовремя
public void mouseClicked(MouseEvent e) {
mouseX = e.getX();
mouseY = e.getY();
int button = e.getButton();
if (button == MouseEvent.BUTTON1 || button == MouseEvent.BUTTON3) {
int mouseR = (mouseY/SIZE);
int mouseC = (mouseX/SIZE);
if (mouseR >= 0 && mouseC >= 0 &&
mouseR < board.length && mouseC < board[0].length) {
if (board[mouseR][mouseC] == 3) {
makeMove(mouseR, mouseC, playerColor);
getValidMoves((playerColor % 2) + 1);
repaint();
getAIMove();
}
}
}
repaint();
}
getAIMove()
разработан таким образом, он ждет в течение нескольких секунд, прежде чем сделать этот шаг, так что игрок может видеть результаты своего хода, прежде чем они видят те из AI. К сожалению, хотя я звоню repaint()
до getAIMove()
, происходит следующее: игрок нажимает, куда они хотят двигаться. Кажется, что ничего не происходит в течение нескольких секунд, затем результаты перемещения игрока и ход AI отображаются на экране. Что происходит?
Я думаю, вы должны переосмыслить дизайн приложения на более стандартный игровой цикл. Ваша перекраска не должна зависеть от логики игры или ввода пользователя .http: //entropyinteractive.com/2011/02/game-engine-design-the-game-loop/ – JohannisK
у вас есть repaint() в конце вашего метод тоже, перерисовать() getAIMove() repaint() автоматически – JRowan
@JRowan Да, я пробовал разные вещи, потому что я не знал, что происходит. Я выберу это, когда я отредактирую для эффективности и т. Д. Сейчас я просто пытаюсь заставить код работать :) – KnightOfNi