2011-01-11 66 views
2

我在寫卡片遊戲。現在我遇到了鼠標處理問題。以下是處理繪製和丟棄卡的遊戲流程的計時器。停止擺動定時器,直到用戶單擊

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()方法的地方在那裏。

我在這裏做什麼?我認爲我不得不以無阻礙的方式無所作爲,對吧?

回答

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. 
    } 

這樣,當玩家抽一張牌,計時器停止,直到卡被丟棄。

0

首先,你的代碼不編譯:

b.players[p].discardCard(int i);包含語法錯誤int i

其次,我不太瞭解這個問題。在需要時停止定時器,實現啓動定時器的偵聽器(即鼠標偵聽器)。

或者我可能不明白你的問題?

順便說一句我剛剛檢查了Timer API。它既沒有啓動也沒有停止方法。你必須處理特定的任務來控制執行。