0

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

当我单击按钮时没有运行(通常)发生,但是如果我在屏幕上随机发送垃圾邮件,有时会碰到程序在我单击按钮时感知到的区域,提前感谢您的帮助

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

恐怕我还不能发布图片,但这里有一个截图链接 http://s2.postimg.org/h9ykqpd5l/Capture6.png

小豆也是一个临时图形,直到我自己制作一个

4

2 回答 2

0

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

更谨慎地尝试发送垃圾邮件点击。

还要检查鼠标的 x 和 y 轴是否与渲染空间的运行方向相同。

于 2013-07-12T13:58:41.283 回答
0

那么圆方程r^2 = mX^2 + mY^2在你的情况下是这样的,假设你的圆的半径是r,鼠标点击是mouseXmouseY圆心是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
于 2013-07-12T14:11:12.917 回答