Остановка таймера Swing, пока пользователь не нажмет - PullRequest
2 голосов
/ 11 января 2011

Я пишу карточную игру. Сейчас у меня проблемы с мышью. Ниже приведен таймер, который управляет ходом игры при рисовании и сбросе карт.

    final Timer timer = new Timer(1000, null);

    timer.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            b.players[p].drawCard();
            if(p==0) // player zero is the human player
            {
                timer.stop();
                // ...
                b.players[p].discardCard(i);
                timer.start();
            }
            else
                b.players[p].discardCard(0);
            p=(p+1)%4;
            b.repaint();
        }
    });

Дело в том, что я хочу остановить таймер, подождать, пока пользователь не щелкнет карту, которую он хочет сбросить, и снова запустить таймер. b реализует MouseListener базовым способом:

public void mouseClicked(MouseEvent arg0) 
{
    clickX = arg0.getX();
    clickY = arg0.getY();
}

Где-то там также есть метод xYtoCardIndex().

Что мне здесь делать? Я предполагаю, что ничего не должен делать неблокирующим образом, верно?

Ответы [ 2 ]

1 голос
/ 11 января 2011

В псевдокоде в MouseEventListener:

public void mouseClicked(MouseEvent arg0) 
{
    clickX = arg0.getX();
    clickY = arg0.getY();

    Card discarded = getCard(clickX,clickY);
    b.players[p].discardCard(discarded);

    // The card has been discarded, I can start my timer again.
    timer.start();
}

В функции drawCard:

    public void drawCard() {
        // Stop the timer
        timer.stop();

        // Do the drawing.
    }

Таким образом, когда игрок берет карту, таймер останавливается докарта сбрасывается.

0 голосов
/ 11 января 2011

Во-первых, ваш код не скомпилирован:

b.players[p].discardCard(int i); содержит синтаксическую ошибку int i.

Во-вторых, я не совсем понимаю проблему.Остановите таймер, когда захотите, включите ваш слушатель (т.е. слушатель мыши), который запускает таймер.

Или, возможно, я не понял вашего вопроса?

Кстати, я только что проверил API таймера.У него нет ни методов запуска, ни остановки.Вы должны иметь дело с конкретными задачами, чтобы контролировать выполнение.

...