当 mouseX 和 mouseY 坐标匹配约束时,新的叠加层不会保留 - 处理 3

New overlay won't stay when mouseX and mouseY coordinates match constraints - Processing 3

  void draw() {

  boolean onTheMoon = false;
  drawGrid(); // Old overlay animation. 
  if ((mouseX > 50) && (mouseX < 150) && (mouseY > 50) && (mouseY < 150)) {
    onTheMoon = true;
  } 
  if (onTheMoon) 
  {
    do 
    {
      moonLanding(); // New overlay method 
    } 
    while ((mouseX > 800) && (mouseX < 1000) && (mouseY > 400) && (mouseY < 700)); //Coordinates for new location on overlay
    }
  rocketShip(); // Calling my rocketship method. Rocket made of shapes using mouseX and mouseY
}

大家好,一旦 mouseX 和 mouseY 坐标与上面代码中顶部 if 语句的条件相匹配,我将尝试保留覆盖 运行。我现在面临的问题是,当 mouseX 和 mouseY 离开旧叠加层出现的区域时,它会破坏动画。我正在测试不同的方法,但没有任何效果。有人有什么建议吗?

根据您上面的评论,听起来 if 条件就可以完成工作,不需要 do/while 循环。

你有这个布尔表达式:(mouseX > 800) && (mouseX < 1000) && (mouseY > 400) && (mouseY < 700).

您希望 moonLanding() 仅在满足 not(!) 条件时调用:

 void draw() {

  boolean onTheMoon = false;
  drawGrid(); // Old overlay animation. 
  if ((mouseX > 50) && (mouseX < 150) && (mouseY > 50) && (mouseY < 150)) {
    onTheMoon = true;
  } 
  if (onTheMoon) 
  {
    if (!((mouseX > 800) && (mouseX < 1000) && (mouseY > 400) && (mouseY < 700))){
      moonLanding(); // New overlay method 
    }
  rocketShip(); // Calling my rocketship method. Rocket made of shapes using mouseX and mouseY
}

这相当于:

 if (((mouseX > 800) && (mouseX < 1000) && (mouseY > 400) && (mouseY < 700)) == false){
          moonLanding(); // New overlay method 
        }

如果您的程序需要更多 mouse/bounding 条件,我有一个建议是将条件封装在可重用的函数中。

例如:

 void draw() {

  boolean onTheMoon = false;
  drawGrid(); // Old overlay animation. 
  if (isMouseOverTopLeft()) {
    onTheMoon = true;
  } 
  if (onTheMoon) 
  {
    if (!isMouseOverBottomRight()){
      moonLanding(); // New overlay method 
    }
  rocketShip(); // Calling my rocketship method. Rocket made of shapes using mouseX and mouseY
}

boolean isMouseOverTopLeft(){
  return isMouseOverRect(50, 50, 150, 150);
}

boolean isMouseOverBottomRight(){
  return isMouseOverRect(800, 400, 1000, 700);
}

boolean isMouseOverRect(float x1, float y1, float x2, float y2){
  return (mouseX >= x1 && mouseX <= x2) && (mouseY >= y1 && mouseY <= y2);
}

我可以很容易地看到许多 isOverX 方法变得荒谬,但到那时你可以开始存储制作一个数据结构来保存边界和边界列表等。 这个想法是为了让代码更容易阅读。