LWJGL鼠标随机执行多次命令

LWJGL鼠标随机执行多次命令,lwjgl,Lwjgl,当我按下鼠标左键时,我试图将我的LWJGL鼠标设置为抓取和不抓取。 然而,这已被证明是一个棘手的问题,因为LWJGL鼠标在某些情况下会多次随机执行该命令。例如: if (Mouse.isButtonDown(0)){ Mouse.setGrabbed( !Mouse.isGrabbed() ); System.out.println("Pushed"); } if(Mouse.isGrabbed()){

当我按下鼠标左键时,我试图将我的LWJGL鼠标设置为抓取和不抓取。 然而,这已被证明是一个棘手的问题,因为LWJGL鼠标在某些情况下会多次随机执行该命令。例如:

if (Mouse.isButtonDown(0)){
            Mouse.setGrabbed( !Mouse.isGrabbed() );
            System.out.println("Pushed");
        } 
       if(Mouse.isGrabbed()){
           camera.processMouse(1, 80, -80);
private boolean alreadyClicked;
void someMethod(){
    if(Mouse.isButtonDown(0)){
        if(!alreadyClicked){
            alreadyClicked = true;
            // do what you want to do when the mouse is clicked
        }
    }
    else{
        alreadyClicked = false;
    }
}
如果我运行这段代码,它将在每次推送时随机打印几次“推送”。你们可以想象,当我试图将鼠标设置为每次点击都是真还是假时,这就成了一个问题。在我尝试这段代码的时候,每次点击它都会打印4-7次“推送”

有没有办法让鼠标每次点击只执行一次命令

非常感谢所有花时间帮助我解决这个问题的人


Thomas

一个简单的方法是检查一个布尔字段,在单击或释放鼠标后,在块的第一次迭代中翻转该字段,以告诉您这是否是自单击后执行if块的第一次。下面是一个例子:

if (Mouse.isButtonDown(0)){
            Mouse.setGrabbed( !Mouse.isGrabbed() );
            System.out.println("Pushed");
        } 
       if(Mouse.isGrabbed()){
           camera.processMouse(1, 80, -80);
private boolean alreadyClicked;
void someMethod(){
    if(Mouse.isButtonDown(0)){
        if(!alreadyClicked){
            alreadyClicked = true;
            // do what you want to do when the mouse is clicked
        }
    }
    else{
        alreadyClicked = false;
    }
}
或者,您可以使用鼠标类的事件缓冲区来检测如下单击:

while(Mouse.next()) {
    if(Mouse.getEventButton() == 0) {
        if(Mouse.getEventButtonState()) {
            // clicked
        }
        else{
            // released
        }
    }
}

美好的找到解决方案!非常感谢。