1

我是Processing 编程语言的新手,目前正试图与我的大学团队一起制作一款基于回合制的游戏。但是,我在处理中称为 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();
4

1 回答 1

7

显然,您在这里拥有的代码在您的 draw() 循环中。每秒循环超过 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;
  }
}
于 2013-10-28T22:16:31.847 回答