gpt4 book ai didi

animation - 在 JavaFX Canvas 中移动形状

转载 作者:行者123 更新时间:2023-12-04 02:45:40 25 4
gpt4 key购买 nike

我想知道是否可以使用 Canvas 的 GraphicsContext 创建一个圆形(或使用 GraphicsContext 创建的任何形状),然后在 Canvas 上移动它。如果是,那么这样做的算法是什么?我习惯于使用 Java,我就是想不通。

在此先感谢您的帮助。

最佳答案

基本上,它的工作方式是您设置一个 Canvas并根据一些 Timeline 更新形状的位置.然后,在 AnimationTimer 中你画你的 Canvas 。

circlefun

import javafx.animation.*;
import javafx.application.Application;
import javafx.beans.property.*;
import javafx.scene.*;
import javafx.scene.canvas.*;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.util.Duration;

public class AnimatedCircleOnCanvas extends Application {
public static final double W = 200; // canvas dimensions.
public static final double H = 200;

public static final double D = 20; // diameter.

@Override public void start(Stage stage) {
DoubleProperty x = new SimpleDoubleProperty();
DoubleProperty y = new SimpleDoubleProperty();

Timeline timeline = new Timeline(
new KeyFrame(Duration.seconds(0),
new KeyValue(x, 0),
new KeyValue(y, 0)
),
new KeyFrame(Duration.seconds(3),
new KeyValue(x, W - D),
new KeyValue(y, H - D)
)
);
timeline.setAutoReverse(true);
timeline.setCycleCount(Timeline.INDEFINITE);

final Canvas canvas = new Canvas(W, H);
AnimationTimer timer = new AnimationTimer() {
@Override
public void handle(long now) {
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.setFill(Color.CORNSILK);
gc.fillRect(0, 0, W, H);
gc.setFill(Color.FORESTGREEN);
gc.fillOval(
x.doubleValue(),
y.doubleValue(),
D,
D
);
}
};

stage.setScene(
new Scene(
new Group(
canvas
)
)
);
stage.show();

timer.start();
timeline.play();
}

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

然而,不使用 Canvas 而是使用 Pane 更简单。包含 Circle结合 TranslateTransition .

关于animation - 在 JavaFX Canvas 中移动形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21396055/

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