Java 鼠标按下的功能似乎不止按一次

Java 鼠标按下的功能似乎不止按一次,java,mouse,processing,Java,Mouse,Processing,我是新来的,目前正试图与我的大学团队一起制作一个基于回合的游戏。但是,我在处理中遇到了一个名为mousePressed的函数的问题。问题似乎是鼠标按下功能不止一次,即使我只按下鼠标一次。我可能错了,但任何帮助都会很好 我有5个按钮,如果我点击其中一个,它会在我的ArrayList中添加X个玩家数量,然后它会继续到第一个玩家翻转,转到骰子,可以通过点击屏幕滚动。但是,当我单击“添加玩家”按钮时,它也会掷骰子,但我希望玩家选择玩家数量,然后再次单击屏幕掷骰子 守则: //this is my "

我是新来的,目前正试图与我的大学团队一起制作一个基于回合的游戏。但是,我在处理中遇到了一个名为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();

显然,这里的代码在draw()循环中。每秒循环25次(或更多),每次都要检查鼠标是否按下。当然,它会触发不止一次,除非你真的很快

正确的方法不是使用if语句,而是使用,每次单击都会触发一次

编辑: 根据您的评论提供的示例:

是否可以按下第一个按钮以获取播放机 然后掷骰子,这样它就不会在一次点击中完成所有事情

为了做到这一点,你需要添加一个布尔值,它表示玩家是否已被选中。如果玩家已被选中,则掷骰子,否则选择一名玩家!(或开关转动?)


显然,这里的代码在draw()循环中。每秒循环25次(或更多),每次都要检查鼠标是否按下。当然,它会触发不止一次,除非你真的很快

正确的方法不是使用if语句,而是使用,每次单击都会触发一次

编辑: 根据您的评论提供的示例:

是否可以按下第一个按钮以获取播放机 然后掷骰子,这样它就不会在一次点击中完成所有事情

为了做到这一点,你需要添加一个布尔值,它表示玩家是否已被选中。如果玩家已被选中,则掷骰子,否则选择一名玩家!(或开关转动?)


您是否尝试过使用带断点的调试器或使用打印语句进行调试?确定鼠标事件是否多次触发应该很容易。我不认为这是一个bug,我尝试过使用println,它有时会显示事件发生3-7次。您的示例代码不包含任何类型的鼠标侦听器,这使得很难判断您是如何接收单击事件的。有些库会在每次UI循环时发送单击信息。在这些情况下,您必须显式地跟踪鼠标的状态,这是非常糟糕的。我要把这个交给Java专家。提交了建议的编辑,将
java
标记替换为
processing
。它即将被拒绝,因为“太小了”()。我批准了它,但又添加了
java
标记,因为处理本质上是java的一种方言,
Processing
标记的追随者很少(是
java
的千分之一),这会使问题不太可能引起注意。编辑再次建议编辑删除
java
标记,说这让人困惑()。我编辑这个问题是为了澄清它是关于基于Java的语言而不是纯Java的。问题是,Java专家是否同意
Java
标记属于关于处理的问题?您是否尝试过使用带断点的调试器或使用print语句进行调试?确定鼠标事件是否多次触发应该很容易。我不认为这是一个bug,我尝试过使用println,它有时会显示事件发生3-7次。您的示例代码不包含任何类型的鼠标侦听器,这使得很难判断您是如何接收单击事件的。有些库会在每次UI循环时发送单击信息。在这些情况下,您必须显式地跟踪鼠标的状态,这是非常糟糕的。我要把这个交给Java专家。提交了建议的编辑,将
java
标记替换为
processing
。它即将被拒绝,因为“太小了”()。我批准了它,但又添加了
java
标记,因为处理本质上是java的一种方言,
Processing
标记的追随者很少(是
java
的千分之一),这会使问题不太可能引起注意。编辑再次建议编辑删除
java
标记,说这让人困惑()。我编辑这个问题是为了澄清它是关于基于Java的语言而不是纯Java的。问题是,Java专家是否同意
Java
标记属于关于处理的问题?请注意,mousePressed不是函数。mousePressed()是。即使我使用void mousePressed()进行操作,它似乎仍然不起作用。是否可以这样做,即按下第一个按钮以获得玩家,然后掷骰子,这样它不会在一次单击中完成所有操作。您没有给我们太多的代码来实际给出解决方案,但我编辑我的帖子是为了给你们一个想法…注意,鼠标在非函数中按下。mousePressed()是。即使我使用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;
  }
}