我编写了一个程序,其中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);
      }
      }
    }

最佳答案

就像我在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是多个圆圈,则需要将此逻辑应用于每个圆圈。如果遇到问题,请尝试尝试并发布一个类似这样的小示例(而不是整个草图)。祝好运。

关于java - 单击后使移动的圆圈消失,正在处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40966663/

10-12 22:20