检查鼠标边界的更有效方法

时间:2014-10-13 15:09:34

标签: java performance

我目前正在使用此代码检查鼠标的x和y坐标,看它是否与我的任何按钮一致。

    if (e.getY() > 204 && e.getY() < 280) {
        if (e.getX() > 190 && e.getX() < 525) {
            selected = 1;
        }
    } else if (e.getY() > 322 && e.getY() < 397) {
        if (e.getX() > 231 && e.getX() < 481) {
            selected = 2;
        }
    } else if (e.getY() > 439 && e.getY() < 512) {
        if (e.getX() > 271 && e.getX() < 442) {
            selected = 3;
        }
    } else if (e.getY() > 560 && e.getY() < 634) {
        if (e.getX() > 282 && e.getX() < 425) {
            selected = 4;
        }
    } else {
        selected = 0;
    }

它可以100%运行,但它似乎会慢慢减慢我的程序。有没有更有效的方法来检查我的鼠标是否超过我的4个按钮之一?

由于

2 个答案:

答案 0 :(得分:3)

该代码中唯一缓慢的部分可能是getX()getY()方法。 if逻辑不应该慢慢减慢你的程序。

尝试使用变量而不是调用函数:

final int x = e.getX();
final int y = e.getY();
// + same logic

答案 1 :(得分:0)

您应该使用您在需要时调用的private void updateMouse()之类的私有方法,然后将局部变量放在方法中存储getter方法int x = e.getX()int y = e.getY(),这样它就会只有在您调用方法updateMouse getX()getY()位置时更新,您还可以节省调用getX()getY()所需的效率。< / p>

然后将代码放入其中,如下所示:

private void updateMouse() 
{ 
    int x = e.getX(); 
    int y = e.getY()

    **** your if statement here
}

现在,您将能够在特定时间运行它,例如每10帧,而不仅仅是连续的。 这样可以节省一些效率。

(抱歉我的英语不好)