单击后,移动圆圈消失,处理

时间:2016-12-05 03:27:47

标签: java processing processing.js

我编写了一个程序,其中从屏幕中心出现一个UFO(实质上是一个灰色椭圆)并飞到边缘。按下鼠标时会出现激光,释放鼠标时会消失。我想这样做,以便当鼠标点击它/激光接触它时,UFO消失。 我已经制作了UFO类并创建了决定其运动和速度的变量,并且我能够让激光直接出现在光标上。我想过制作一个'if'语句来检查光标是否在UFO的半径(或直径)内,并将其放在我为UFO创建的for循环中。但是,我不确定如何实现正确的语法来实现它。 注意:播放草图后,您可能需要等待几秒钟才能显示第一个圆圈。

    UFO[] ufos = new UFO[3];

    void setup() {
      size(700, 700);
      for (int j = 0; j < ufos.length; j++) {
          ufos[j] = new UFO();
      }
    }

    //UFO class
    //Class setup ends on line 61
    class UFO {
     float a;
     float b;
     float c;
     float sa;
     float sb;
     float d;

     UFO() {
       //declare float a/b/c value
      a = random(-width/2, width/2);
      b = random(-height/2, width/2);
      c = random(width);
     }
     //UFO movement
     void update() {
       //float c will serve as a speed determinant of UFOs
      c = c - 1;
     if (c < 5) {
       c = width;
     }
     }

     //UFO setup
     void show() {

       //moving x/y coordinates of UFO
       float sa = map(a / c, 0, 1, 0, width);
       float sb = map(b / c, 0, 1, 0, height);
       float d = map(c, 0, width, 50, 0);

      //UFO drawing shapes
      //ellipse is always sa (or sb) / c to allow UFO to appear 
      //as if it is moving through space
    fill(200);
    ellipse((sa / c), (sb / c), d + 5, d+5);


    //Hides UFO way off the screen
    //and replaces it with a black-filled ellipse until
    //it forms into a full circle
    //When radius d becomes 50, the UFO flies from the
    //center of the screen to off of the screen
     if (d < 50) {
         fill(0);
         ellipse(-5, -10, 90, 90);
        sa = 10000;
        sb = 10000;

       }
     }
    } 


    void draw() {
      //Background
      background(0);
      //Translated the screen so that the UFOs appear to fly from
      //the center of the screen
      translate(width/2, height/2);

      //UFO draw loop, make UFO visible on screen
      for (int j = 0; j < ufos.length; j++) {
        ufos[j].update();
        ufos[j].show();

         //mouse-click laser
      if (mousePressed == true) {
        fill(200,0,0);
        ellipse(mouseX - 352,mouseY - 347,50,50);
      }
      }
    }

1 个答案:

答案 0 :(得分:1)

就像我在the Happy Coding forum上所说的那样:

基本上,如果您的UFO是一系列圆圈,那么您只需要使用dist()功能来检查鼠标到圆心的距离是否小于圆的半径。如果是,则鼠标位于圆圈内。这是一个小例子:

float circleX = 50;
float circleY = 50;
float circleDiameter = 20;
boolean showCircle = true;

void draw(){
  background(0);
  if(showCircle){
   ellipse(circleX, circleY, circleDiameter, circleDiameter); 
  }
}

void mousePressed(){
 if(dist(mouseX, mouseY, circleX, circleY) < circleDiameter/2){
   showCircle = false;
 }
}

如果您的UFO是多个圈子,则需要将此逻辑应用于每个圈子。如果你遇到困难,请尝试一下并发布一个像这样的小例子(不是你的整个草图)。祝你好运。