Обрамление изображения. Как подогнать размеры фигуры под изображение? - PullRequest
1 голос
/ 24 марта 2019

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

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

У меня вопрос: есть ли какая-нибудь встроенная библиотека, предоставляемая JavaFX для решения этой проблемы, или вам нужно использовать формулу исчисления для ее решения?

Я пытался просмотреть API-интерфейсы JavaFX, но не могу найти ничего полезного.

// Getting the images for the shapes
Image spaceCity = new Image("com/images/spaceCity.jpg");
Image spaceShip = new Image("com/images/spaceShip.png");

// Making the graphics
Rectangle space_Ship = new Rectangle(0, positionOfShipY, 191, 300);
Rectangle background = new Rectangle(0, 0, STAGE_WIDTH, STAGE_HEIGHT);

У меня есть мой пример (я не знаю, почему переполнение стека не позволяет мне загружать изображения):

https://docs.google.com/document/d/1A8HJ61jhthBhd7wr6xrZNLlsTcQJNLUhTzrucvNY3BY/view?usp=sharing

Ответы [ 2 ]

4 голосов
/ 24 марта 2019

Установите размеры фигуры на основе изображения и поместите оба в StackPane:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class FxTest extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{

        String imagePath = "https://png.pngtree.com/png-clipart/20190118/ourmid/"
                          + "pngtree-hand-drawn-spaceship-grey-spaceship-alien-spaceship-blue"
                          + "-spaceship-border-png-image_450067.jpg";
        Image image =  new Image(imagePath);
        Rectangle rec = new Rectangle(0, 0, 50+image.getWidth(), 50+image.getHeight());
        rec.setFill(Color.AQUA);

        StackPane root = new StackPane();
        root.getChildren().add(rec);
        root.getChildren().add(new ImageView(image));
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(null);
    }
} 

enter image description here

1 голос
/ 24 марта 2019

Вы можете использовать DropShadow, чтобы нарисовать границу вокруг изображения вашего космического корабля:

Image image = new Image("/path/to/image.png");
ImageView imageView = new ImageView(image);
DropShadow ds = new DropShadow();
ds.setColor(Color.RED);
ds.setSpread(10);
imageView.setEffect(ds);
...