Каждый другой прямоугольник обнаруживает столкновение в моей игре Java FX - PullRequest
0 голосов
/ 01 декабря 2019

Хорошо, у меня есть эта маленькая игра-макет Clash Royale, и когда я нажимаю, чтобы вызвать персонажа и переместить его через мост на панели, у меня появляется враг на мосту, и мой персонаж останавливается, как он должен.

НО, если я нажму, чтобы вызвать моего второго персонажа, ДО того, как он доберется до врага, тогда ПЕРВЫЙ персонаж проходит сквозь врага и идет в башню.

Теперь, что я хочу сделать, это обнаружить для каждого персонажа, и все они должны действовать одинаково. Не совсем уверен, что здесь происходит, но мне нужна небольшая помощь, так как это первая игра, которую я действительно сделал раньше.

private void createCharacter(CHARACTER choosenCharacter) {
    gamePane.setOnMouseClicked(new EventHandler<MouseEvent>() {

        @Override
        public void handle(MouseEvent event) {

            if (elixir > 4) {
                character = new ImageView(choosenCharacter.getUrl());
                healthbar = new Rectangle(50.0, 10.0, Color.BLUE);

                character.setLayoutX(event.getSceneX() - 40);
                character.setLayoutY(event.getSceneY() - 110);

                healthbar.setLayoutX(event.getSceneX() - 40);
                healthbar.setLayoutY(event.getSceneY() - 110);

                System.out.println(event.getSceneX() + "\n" + event.getSceneY());
                elixir = elixir - 6;

                if (detectCollision()){
                 gameTimer.stop();
                }
                createGameLoop(character, healthbar);
                gamePane.getChildren().add(character);
                gamePane.getChildren().add(healthbar);

            }
        }
    });

}

private void moveCharacter(ImageView character, Rectangle health) {   
    if (character.getLayoutX() > 180 && character.getLayoutX() < 450) {
        character.setLayoutX(character.getLayoutX() - 2);
    }
    if (health.getLayoutX() > 180 && health.getLayoutX() < 450) {
        health.setLayoutX(health.getLayoutX() - 2);  
    }

    if (character.getLayoutX() <= 200 && character.getLayoutY() > 2) {
        character.setLayoutY(character.getLayoutY() - 2);

    }
    if (health.getLayoutX() <= 200 && health.getLayoutY() > 2) {
        health.setLayoutY(health.getLayoutY() - 2); 
    }

    if (character.getLayoutX() < 700 && character.getLayoutX() >= 450) {
        character.setLayoutX(character.getLayoutX() + 2);
    }
    if (health.getLayoutX() < 700 && health.getLayoutX() >= 450) {
        health.setLayoutX(health.getLayoutX() + 2);
    }

    if (character.getLayoutX() >= 700 && character.getLayoutY() > 2) {
        character.setLayoutY(character.getLayoutY() - 2);
    }
    if (health.getLayoutX() >= 700 && health.getLayoutY() > 2) {
        health.setLayoutY(health.getLayoutY() - 2);
    }
}

private void createGameLoop(ImageView character, Rectangle health) {
    gameTimer = new AnimationTimer() {
        @Override
        public void handle(long now) {
            if (detectCollision()){
             gameTimer.stop();
            }
            moveCharacter(character, health);

        }
    };

    gameTimer.start();
}

Как видите, это не самый чистый код, но мне нужно немногоспособ обнаружить каждый экземпляр моего игрового персонажа, и я просто не могу придумать, как решить эту мою маленькую проблему. Будем очень благодарны за любые предложения о том, как справиться с чем-то подобным. Спасибо!

...