Обработка событий в LIBGDX.Событие зарегистрировано в двух местах одновременно - PullRequest
0 голосов
/ 19 ноября 2018

Я создаю игру «Базовый бой на терне», и у меня проблема в том, что я хочу создать кнопку, в которой вы можете нажать на нее, а затем нажать на целевого врага.

Пока что эточасть кода, который у меня есть:

public class FightScreen extends BaseScreen {
    LevelScreen previousMap;
    Champion fighterOne;
    boolean turn = true; //variable to set the turn of the player, if true is players turn, otherwise enemy turn
    EnemyFighters enemyOne;
    EnemyFighters enemyTwo;
    EnemyFighters enemyThree;
    boolean firstAttack = false;


public FightScreen(LevelScreen prev){
    super();
    previousMap = prev;
}


public void initialize() {
    //initialize the mapbackground
    BaseActor fightBackground = new BaseActor(0,0, mainStage);
    fightBackground.loadTexture( "assets/img/dungeon.png" );
    fightBackground.setSize(800,600);
    //initialize the actors at the screen
    fighterOne = new WarriorOne(mainStage);
    enemyOne = new BatFighter(mainStage);
    enemyTwo = new SkeletonFighter(mainStage);
    enemyThree = new ZombieFighter(mainStage);


    //create the buttons
    uiStage.addActor(fighterOne.getFirstButton());


    fighterOne.getFirstButton().addListener(
            (Event e) ->
            {

                if ( !(e instanceof InputEvent) )
                    return false;

                if ( !((InputEvent)e).getType().equals(InputEvent.Type.touchDown) )
                    return false;
                if (!(turn))
                    return false;
                firstAttack = true;
                System.out.println("we need a target please!");
                return true;
            }
    );
    enemyTwo.addListener(
            (Event o) ->
            {
                if ( !(o instanceof InputEvent) )
                    return false;

                if ( !((InputEvent)o).getType().equals(InputEvent.Type.touchDown) ){
                    return false;
                }
                if (firstAttack){
                    fighterOne.attackOne(enemyTwo);
                    firstAttack = false;
                    System.out.println("we delivered the attack! viva");
                    turn = !turn;
                }else
                    return false;

                return true;
            }
    );

}

public void update(float dt) {
    if (!(turn)){      
        enemyOne.attackOne(fighterOne);
        turn = !(turn);
        System.out.println("we got attacked by enemy");
        System.out.println("Our hero health is: "+ fighterOne.getHP());

    }
    if (Gdx.input.isButtonPressed(Input.Buttons.RIGHT)){
        System.out.println("setting attack to false");
        firstAttack = false;
    }
}

}

Моя проблема заключается в том, что когда я нажимаю ЛЕВЫЙ щелчок мышью, и EventListener для fighterOne, и слушатель в обновлении вызывают вызов.

Можно ли прослушивать щелчок левой кнопкой мыши только в том случае, если в методе обновления класса не нажимается ни один объект?

Заранее спасибо.

...