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

时间:2013-07-12 13:57:25

标签: java button interface geometry

我有2个圆形按钮在一个圆圈中旋转,我需要程序才能识别出我在圆圈内点击了,其中一个按钮用于启动,一个用于退出。

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

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);
        }
    }

当我点击按钮时没有任何操作(通常),但如果我在屏幕上随机垃圾我的鼠标,有时会点击一个区域,当我点击按钮时程序会感觉到这个区域,感谢您提前获得的帮助< / p>

额外注意,那里的+ 50是因为按钮的半径为50px

我担心我无法发布图片,但这是截图的链接 http://s2.postimg.org/h9ykqpd5l/Capture6.png

小豆也是一个临时的图形,直到我自己创造一个

2 个答案:

答案 0 :(得分:0)

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

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

同时检查你的x和y轴是否与你的渲染空间在鼠标的方向上相同。

答案 1 :(得分:0)

这个圆方程是r^2 = mX^2 + mY^2所以在你的情况下假设圆的半径是r,鼠标点击是mouseXmouseY,圆心是{{1} }和cX然后

cY