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()
方法。
我在这做什么?我假设我必须以无阻塞的方式做任何事情,对吧?
答案 0 :(得分:1)
在伪代码中,在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.
}
这样,当玩家拿出一张牌时,计时器就会停止,直到牌被丢弃为止。
答案 1 :(得分:0)
首先,您的代码未编译:
b.players[p].discardCard(int i);
包含语法错误int i
。
其次,我真的不明白这个问题。在需要时停止计时器,实现启动计时器的监听器(即鼠标监听器)。
或者我可能不明白你的问题?
BTW我刚刚检查过Timer API。它既没有启动也没有停止方法。您必须处理特定任务以控制执行。