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