Slick2D Mouse распространение событий

Я реализую небольшую игру (Базовое состояние игры), и мне трудно работать с кнопками навигации. У меня есть класс меню, которое содержит 3 кнопки: Play, How to Play и Exit. Например, когда я нажимаю кнопку "Как играть", он перенаправляет меня в класс "Как играть". В классе "Как играть" у меня есть только кнопка: "Назад", которая должна перенаправить меня обратно в класс меню. Все работает, но когда я нажимаю кнопку "Назад", он выходит из игры, и это потому, что он имеет те же координаты, что и кнопка "Выход" из меню. Как я могу остановить распространение? Мой код похож на:

Main Class:

public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException{ // update the images on screen to create image movement illusion
    Input input = gc.getInput();
    mouseX = Mouse.getX();
    mouseY = gc.getHeight()-Mouse.getY();
    position = "*xpos: "+mouseX+" ypos:"+mouseY;
    buttonsListener(input, sbg);
}
public void buttonsListener(Input input, StateBasedGame sbg) throws SlickException
{

    if((mouseX>130&&mouseX<477)&&(mouseY>308&&mouseY<377))//play button
        if(input.isMouseButtonDown(0))
            sbg.enterState(1);  

    if((mouseX>130&&mouseX<477)&&(mouseY>408&&mouseY<477))//how to play button
        if(input.isMouseButtonDown(0))
            sbg.enterState(2);

    if((mouseX>130&&mouseX<477)&&(mouseY>508&&mouseY<577))//exit button
        if(input.isMouseButtonDown(0))
            System.exit(0);
}

А также:

HowToPlay Class: 

public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException{
    Input input = gc.getInput();
    mouseX = Mouse.getX();
    mouseY = gc.getHeight()-Mouse.getY();

    if((mouseX>130&&mouseX<477)&&(mouseY>508&&mouseY<577))//back button
        if(input.isMouseButtonDown(0))
            sbg.enterState(0);
}

Пожалуйста, помогите, спасибо.

1 ответ

Я понял, поэтому для любого из вас, имеющих такую ​​же проблему, вы можете просто переписать метод mousePressed, например (в моем случае):

Main class:
public void mousePressed(int button, int x, int y) { // check if the buttons are pressed
       if((x>130&&x<477)&&(y>308&&y<377))
            if(button==0)
                sbg.enterState(1);  
        if((x>130&&x<477)&&(y>408&&y<477))
            if(button==0)
                sbg.enterState(2);
        if((x>130&&x<477)&&(y>508&&y<577))
            if(button==0)
                System.exit(0);
    }

А также

Howtoplay class:
public void mousePressed(int button, int x, int y) { // check if the buttons are pressed
    if( ( x > 130 && x < 477 ) && ( y > 508 && y < 577 ) )
        if(button==0)
            sbg.enterState(0);
}

И это больше не будет распространяться.

Другие вопросы по тегам