2016-12-05 110 views
1

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

请链接crossposts:http://forum.happycoding.io/t/make-a-moving-circle-disappear-when-clicked-on/47 它看起来像你删除了我回答的问题这已经在堆栈溢出。那个问题去了哪里? –

回答

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是多个圆圈,那么你需要将这个逻辑应用到每个圆圈。请尝试一下并发布一个像这样的小例子(不是你的整个草图),如果你卡住了。祝你好运。

相关问题