尝试在Processing中创建一个骰子,但点击不会触发它

时间:2015-10-03 00:53:52

标签: java processing

我想创建一个程序,在点击“滚动”的矩形后显示骰子的面部,但是当我点击时,没有任何反应。

有人可以解释我做错了吗?

import java.util.Random;

public Random random = new Random();

public color purple = #B507F5;
public int diceChoose = random.nextInt(6);
public int x = mouseX;
public int y = mouseY;


public void setup() {
  size(750, 900);
  background(255);

}

public void draw() {
  strokeWeight(3);

  //dice roll button
  rect(100, 700, 550, 150);
  textSize(100);
  fill(purple);
  text("Roll", 280, 815);
  noFill();

  //dice face
  rect(100, 100, 550, 550);

  roll();
}

public void one() {
  fill(0);
  ellipse(375, 375, 100, 100);
  noFill();
}

public void two() {
  fill(0);
  ellipse(525, 225, 100, 100);
  ellipse(225, 525, 100, 100);
  noFill();
}

public void three() {
  fill(0);
  ellipse(375, 375, 100, 100);
  ellipse(525, 225, 100, 100);
  ellipse(225, 525, 100, 100);
  noFill();
}

public void four() {
  fill(0);
  ellipse(525, 225, 100, 100);
  ellipse(225, 525, 100, 100);
  ellipse(525, 525, 100, 100);
  ellipse(225, 225, 100, 100);
  noFill();
}

public void five() {
  fill(0);
  ellipse(375, 375, 100, 100);
  ellipse(525, 225, 100, 100);
  ellipse(225, 525, 100, 100);
  ellipse(525, 525, 100, 100);
  ellipse(225, 225, 100, 100);
  noFill();
}

public void six() {
  fill(0);
  ellipse(525, 225, 100, 100);
  ellipse(225, 525, 100, 100);
  ellipse(525, 525, 100, 100);
  ellipse(225, 225, 100, 100);
  ellipse(525, 375, 100, 100);
  ellipse(225, 375, 100, 100);
  noFill();
}

public void roll() {
  if (mousePressed && x > 100 && x < 650 && y > 700 && y < 850) {
    diceChoose = random.nextInt(6);
    if (diceChoose == 0) {
      one();
    }
    else if (diceChoose == 1) {
      two();
    }
    else if (diceChoose == 2) {
      three();
    }
    else if (diceChoose == 3) {
      four();
    }
    else if (diceChoose == 4) {
      five();
    }
    else if (diceChoose == 5) {
      six();
    }
  }
}

1 个答案:

答案 0 :(得分:0)

您可以在程序的最开始将xy变量设置为mouseXmouseY。但意味着当mouseXmouseY发生变化时,您的xy变量也会发生变化。考虑一下:

float x = 100;
float y = x;
x = 200;
println(y); //prints 100!

因此,您需要在此if语句中使用xy,而不是引用mouseXmouseY(永不更改):

  if (mouseX > 100 && mouseX < 650 && mouseY > 700 && mouseY < 850) {

然后你还有一些其他问题(你实际上没有检测到点击),但这是你第一个问题的答案。

顺便说一句,我想出来的方法是简单地添加println()语句。我把一个放在你的if语句之前,一个放在它里面:

  println("here 1");
  if (x > 100 && x < 650 && y > 700 && y < 850) {
    println("here 2"); 

打印出“here 1”,但“here 2”没有,所以我知道要仔细查看if语句中的逻辑。将来,您可以自己尝试这种类型的调试,省去了发帖的麻烦!