gpt4 book ai didi

java - 如何在 JavaFX 中创建 Sprite 运行周期?

转载 作者:行者123 更新时间:2023-12-02 01:22:08 24 4
gpt4 key购买 nike

所以,我正在尝试使用 JavaFX 创建游戏。我了解大部分基础知识,但我对如何在 JavaFX 中创建 Sprite 运行周期感到困惑。

Sprite 表:/image/raisY.jpg

我希望能够使用方法调用运行周期,例如:

public static void runCycle(){
// execute run cycle, I think the Animation class may help here?
// move image as well, I got that nailed down already though.
}

我知道这不是 MRE,但我正在尝试集思广益,因此如果您有任何建议,请告诉我! :)

链接的图像是 Sprite 表,如果有人可以帮助我解决这个问题那就太好了。谢谢!

最佳答案

您需要定期更新 UI 才能实现此目的。具体如何执行此操作取决于您对其余更新进行编码的方式。如果您使用 AnimationTimer 创建游戏循环,这可能是进行这些更新的好地方,但对于单个图像来说 Timeline看起来最方便。

更新 GUI 的方式取决于您想要绘制图像的方式。 Canvas需要与 ImageView 不同的处理。前者要求您使用 drawImage方法允许您指定要绘制的源图像的部分,后者要求您更新 viewport属性。

以下示例显示如何使用ImageViewTimeline为此目的:

@Override
public void start(Stage primaryStage) throws Exception {
Image image = new Image("https://i.imgur.com/K2nHT23.png");
int height = 4;
int width = 2;
double spriteHeight = image.getHeight() / height;
double spriteWidth = image.getWidth() / width;

// create viewports to cycle through
List<Rectangle2D> areas = new ArrayList<>(height * width);

for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
areas.add(new Rectangle2D(x * spriteWidth, y * spriteHeight, spriteWidth, spriteHeight));
}
}

ImageView imageView = new ImageView(image);
imageView.setViewport(areas.get(0));

// create timeline animation cycling through viewports
Timeline timeline = new Timeline(new KeyFrame(Duration.millis(1000d / 6), new EventHandler<ActionEvent>() {

int index = 0;

@Override
public void handle(ActionEvent event) {
imageView.setViewport(areas.get(index));
index++;
if (index >= areas.size()) {
index = 0;
}
}

}));
timeline.setCycleCount(Animation.INDEFINITE);
timeline.play();

Scene scene = new Scene(new StackPane(imageView));
primaryStage.setScene(scene);
primaryStage.show();
}

(不确定这是否是动画中所需的 Sprite 顺序。)

关于java - 如何在 JavaFX 中创建 Sprite 运行周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57516831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com