处理检测单击时鼠标是否在弹跳圆内

时间:2017-04-21 09:45:54

标签: processing mouseclick-event

尝试确定鼠标是否已在某个球内被点击以及何时点击它我想显示与该特定球相关的文字,这是我到目前为止所提供的任何帮助都将受到赞赏。

    int rad = 60;        // Width of the shape
float xpos1, ypos1;    // Starting position of shape    
float xspeed = 4;  // Speed of the shape
float yspeed = 4;  // Speed of the shape
int xdirection = 1;  // Left or Right
int ydirection = 1;  // Top to Bottom
boolean overBox1 = false;
void setup() 
{
  size(1200, 800);
  noStroke();
  frameRate(30);
  ellipseMode(RADIUS);
  // Set the starting position of the shape
  xpos1 = width/2;
  ypos1 = height/2;
}

void draw() 
{

  background(102);

  circleone();

}
void circleone()
{
 xpos1 = xpos1 + ( xspeed * xdirection );
 ypos1 = ypos1 + ( yspeed * ydirection );
  if (xpos1 > width-rad || xpos1 < rad) {
    xdirection *= -1;
  }
  if (ypos1 > height-rad || ypos1 < rad) {
    ydirection *= -1;
  }
 ellipse(xpos1, ypos1, rad, rad);

}

 void mouseClick()
 {
   if (overCircle(xpos1,ypos1,rad)==true)
   {
     println("YO");     
   }

 }
 boolean overCircle(float x, float y, int radius) {
  float disX = x - mouseX;
  float disY = y - mouseY;
  if (sqrt(sq(disX) + sq(disY)) <radius) {
    return true;
  } else {
    return false;
  }
}

1 个答案:

答案 0 :(得分:0)

这个逻辑似乎过于复杂:

float disX = x - mouseX;
float disY = y - mouseY;
if (sqrt(sq(disX) + sq(disY)) <radius) 

您可以改为使用dist()功能:

return dist(x, y, mouseX, mouseY) < radius;

然后,如果你想在点击球时显示一些文字,你将不得不添加超过println()的声明。您可以将boolean变量设置为true,然后在draw()函数中检查该变量,并在屏幕显示时将其绘制为真实。< / p>

如果您试图在屏幕上获得许多可点击的球,那么您可能会考虑代表球的creating classes并将逻辑放在那里。

但你还没有真正问过一个问题。您已经发布了一些代码,但没有告诉我们您希望它做什么,它做了什么,或者这两个方面有什么不同。 Stack Overflow并非真正针对一般&#34;我如何做到这一点&#34;输入问题。它更具体&#34;我试过X,期待Y,但得到Z而不是#34;输入问题。因此,如果您发布MCVE而不是整个项目,并且询问有关特定代码行的特定问题,那么您将获得更好的运气。祝你好运。