2013-10-28 16 views
0

我是新來的Processing programming language,目前試圖使原來基於遊戲我的大學羣。不過,我在處理函數mousePressed中遇到問題。問題似乎是鼠標按下功能不止一次,即使我只按一下鼠標。我可能錯了,但任何幫助都會很好。功能的mousePressed似乎按不止一次

我有5個按鈕,如果我點擊其中一個按鈕,它會在我的ArrayList中添加X數量的玩家,之後它應該繼續玩第一個玩家,轉到骰子,這可以通過點擊屏幕來滾動。然而,當我點擊我的添加玩家按鈕時,它也會擲骰子,但我希望玩家選擇數量較多的玩家,然後再次單擊屏幕以擲骰子。

代碼:

//this is my "if" the player choose to have two players, the first player turns begin 

    if(player.get(0) == 1){ 
     fill(255); 
     text("First player turn", width/2, height/5); 
     noLoop(); 

     dice.display(); 
     dice.mouseRoll(); 


// here you have my dice roll function 
    void mouseRoll(){      
    if(mousePressed==true){ 
     dice.roll(1,4); // just a random between the two number 
     noLoop(); 
+0

您是否嘗試過使用帶斷點調試器或使用打印語句進行調試?如果鼠標事件觸發多次,應該很容易找到確定的位置。 – Chill

+0

我不認爲是,試圖做的println一個bug,它顯示了它有時3-7次事件發生。 –

+0

您的示例代碼中不包含任何形式的鼠標偵聽器,這使得它很難告訴你如何接收點擊事件。每次UI循環循環時,一些庫會發送點擊信息。在這些情況下,你必須明確地跟蹤鼠標的狀態,這是非常蹩腳的。 – Chill

回答

7

顯然,你這裏的代碼是在你的平局()循環。每秒循環25次(或更多),並檢查鼠標是否被按下。當然,除非你真的很快,否則它會觸發不止一次。

正確的方式做,這是不是與if語句但void mousePressed(),每一次點擊觸發!

編輯: 根據您的評論樣本:

是有可能這樣做,從而第一按鈕按下時獲得玩家 ,然後擲骰子,所以不要一個鍵盡一切

爲了做到這一點,你需要添加一個布爾值來表示是否已經選擇了玩家。如果玩家已被選中,則擲骰子,否則選擇一名玩家! (或開關輪流?)

boolean playerSelected = false; 
void mousePressed() { 
    if(!playerSelected) { 
    // select a player here or switch turns 
    fill(255); 
    text("First player turn", width/2, height/5); 
    playerSelected = true; 
    } 
    else { 
    dice.display(); 
    dice.roll(1,4); 
    playerSelected = false; 
    } 
} 
+1

請注意mousePressed不是函數。 mousePressed()是。 –

+0

即使我用void mousePressed()來完成它,它仍然不起作用,是否可以這樣做,即按下第一個按鈕以獲取播放器,然後滾動骰子,這樣它就不會在一次單擊中完成所有操作。 –

+0

你不給我們太多的代碼來實際給出一個解決方案,但我編輯我的帖子給你一個想法... –