Хорошо, у меня есть эта маленькая игра-макет 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();
}
Как видите, это не самый чистый код, но мне нужно немногоспособ обнаружить каждый экземпляр моего игрового персонажа, и я просто не могу придумать, как решить эту мою маленькую проблему. Будем очень благодарны за любые предложения о том, как справиться с чем-то подобным. Спасибо!