我有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
小豆也是一个临时的图形,直到我自己创造一个
答案 0 :(得分:0)
我认为这是因为您只检查鼠标按钮是否已关闭。如果已按下并释放鼠标按钮,则不会。我猜你是否将鼠标拖到按钮上会触发它。如果您在疯狂发送垃圾邮件时将鼠标拖到附近,它将会触发。
更仔细地尝试发送垃圾邮件。
同时检查你的x和y轴是否与你的渲染空间在鼠标的方向上相同。
答案 1 :(得分:0)
这个圆方程是r^2 = mX^2 + mY^2
所以在你的情况下假设圆的半径是r
,鼠标点击是mouseX
,mouseY
,圆心是{{1} }和cX
然后
cY