Java 检查我的鼠标是否在圆圈内,圆圈正在移动

Java 检查我的鼠标是否在圆圈内,圆圈正在移动,java,button,interface,geometry,Java,Button,Interface,Geometry,我有两个圆形按钮在一个圆圈中旋转,我需要程序能够识别我在圆圈内单击,其中一个按钮用于开始,另一个按钮用于退出 下面是我代码顶部声明的相关变量 double angleStart=1.5*pi; double angleQuit=0.5*pi; int radius=120; int centerX=300; int centerY=160; float startPosX = (float) (centerX + Math.sin(angleStart)*radius); float start

我有两个圆形按钮在一个圆圈中旋转,我需要程序能够识别我在圆圈内单击,其中一个按钮用于开始,另一个按钮用于退出

下面是我代码顶部声明的相关变量

double angleStart=1.5*pi;
double angleQuit=0.5*pi;
int radius=120;
int centerX=300;
int centerY=160;
float startPosX = (float) (centerX + Math.sin(angleStart)*radius);
float startPosY = (float) (centerY + Math.cos(angleStart)*radius);
float quitPosX = (float) (centerX + Math.sin(angleQuit)*radius);
float quitPosY = (float) (centerY + Math.cos(angleQuit)*radius);
图像/按钮在startPosX/Y和quitPosX/Y处绘制

下面是使按钮旋转的代码

    int posX = Mouse.getX();
    int posY = Mouse.getY();
    double constant=0.002*pi;

    startPosX = (float) (centerX + Math.sin(angleStart)*radius);
    startPosY = (float) (centerY + Math.cos(angleStart)*radius);
    quitPosX = (float) (centerX + Math.sin(angleQuit)*radius);
    quitPosY = (float) (centerY + Math.cos(angleQuit)*radius);

    angleStart+=constant;
    angleQuit+=constant;
    if (angleStart>=2*pi){
        angleStart-=2*pi;
    }
    if (angleQuit>=2*pi){
        angleQuit-=2*pi;
    }
正如你所看到的,PosX和PosY是鼠标坐标

最后,这里是决定按钮是否被点击的代码

//start button
    float startXDist=posX-(startPosX+50);
    float startYDist=posY-(startPosY+50);
    float startDist=(float) Math.sqrt((startXDist*startXDist)+(startYDist*startYDist));
    if(startDist<=50){
        if(Mouse.isButtonDown(0)){
            sbg.enterState(1);
        }
    }

    //quit button
    float quitXDist=posX-(quitPosX+50);
    float quitYDist=posY-(quitPosY+50);
    float quitDist=(float) Math.sqrt((quitXDist*quitXDist)+(quitYDist*quitYDist));
    if(quitDist<=50){
        if(Mouse.isButtonDown(0)){
            System.exit(0);
        }
    }
//开始按钮
float startXDist=posX-(startPosX+50);
float startYDist=posY-(startPosY+50);
float startDist=(float)Math.sqrt((startXDist*startXDist)+(startYDist*startYDist));

如果(startDist我认为这是因为你只检查鼠标按钮是否按下。如果鼠标按钮已按下并释放,则不检查。我猜如果你将鼠标拖动到按钮上方,它将触发。如果你在疯狂发送垃圾邮件时将鼠标拖动到附近,它将触发

尝试更仔细地发送垃圾邮件


同时检查鼠标的x轴和y轴是否与渲染空间的方向一致。

圆方程是
r^2=mX^2+mY^2
,因此在您的情况下,假设圆的半径是
r
,鼠标点击是
mouseX
mouseY
,圆心是
cX
cY然后

if (Math.pow(mouseX-cX,2)+Math.pow(mouseY-cY,2)<Math.pow(r,2))
  // mouse is within that circle do related codign here

if(Math.pow(mouseX-cX,2)+Math.pow(mouseY-cY,2)要更快地获得更好的帮助,请发布一个。另请参见提示。可以,gimi 5分钟“gimi 5分钟”我几乎没有足够的时间阅读文档。请不要“猜测”它的意思。另外,请使用“你”、“你的”和“请”等词的正确拼写。这使人们更容易理解和帮助。别傻了,我相信我在我的帖子中使用了正确的语法,那么为什么说我拼写“你”和“请”等词呢“你的”错误你的权利关于它不需要按下和释放,但它仍然不起作用当我点击按钮的时候,我似乎找不到任何模式在我点击的位置和它是否起作用之间你的鼠标坐标空间是否与你的渲染空间匹配?X是否从左到右运行,y是否从下到上运行例如,rds和渲染坐标?我尝试在没有+50的情况下使用它,但运气不好,它们在那里,因为我需要圆心和鼠标之间的差异,而不是它的绘制位置和鼠标之间的差异,鼠标将位于图像的左上角。你检查过坐标空间匹配吗?问题解决了,多亏了William Morrison,我只是简单地添加到代码中,其中计算了start和quit的y差,所以它看起来像这个float quitYDist=(480 posY)-(quitPosY+50);问题是鼠标坐标是从左下角获取的,而图像坐标是从左上角获取的,由于游戏容器的高度为480px,所以输入该值是为了从顶部而不是底部获取鼠标的y值,这正是我所做的,除了我将等式的左侧平方根化,然后输入