我正在制作一款基于JavaFX的游戏,该游戏使用太空飞船射击无人机以保卫基地。我想在图像周围包裹一个形状以为其创建一个命中框。
这将使激光每当碰到命中盒时会对无人机造成损坏。它将使游戏看起来比激光打到不可见的墙壁(形状的尺寸)好,而不是击打实际的图像更好。
我的问题是,JavaFX是否提供任何内置库来解决此问题,还是您必须使用演算公式来解决此问题?
我试图查看JavaFX的API,但似乎找不到任何有用的东西。
// 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
答案 0 :(得分:4)
根据图像设置形状的尺寸,然后将两者都放在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);
}
}
答案 1 :(得分:1)
您可以使用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);