我想知道为什么我的图表每次移动后屏幕都不清晰。这是我的代码:
MainClass,我想删除其中的“时间”,并将其放在绘图方法updateScene中的lambda表达式中,但还不知道如何做到这一点:/
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class MainClass extends Application{
private Drawing draw;
private double time = 0;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(final Stage stage) {
Group root = new Group();
root.setStyle("-fx-background-color: rgb(35, 39, 50);");
stage.setScene(new Scene(root, 1000, 1000, Color.rgb(35, 39, 50)));
while(time < 2 ) {
draw = new Drawing(root, time);
time+=0.1;
draw.updateScene();
stage.show();
}
}
}
Axes类描述如何绘制轴:
import javafx.beans.binding.Bindings;
import javafx.geometry.Side;
import javafx.scene.chart.NumberAxis;
import javafx.scene.layout.Pane;
public class Axes extends Pane{
private NumberAxis xAxis;
private NumberAxis yAxis;
public Axes(int width, int height,
double xMin, double xMax, double xTickUnit,
double yMin, double yMax, double yTickUnit) {
setMinSize(Pane.USE_PREF_SIZE, Pane.USE_PREF_SIZE);
setPrefSize(width, height);
setMaxSize(Pane.USE_PREF_SIZE, Pane.USE_PREF_SIZE);
xAxis = new NumberAxis(xMin, xMax, xTickUnit);
xAxis.setSide(Side.BOTTOM);
xAxis.setMinorTickVisible(false);
xAxis.setPrefWidth(width);
xAxis.setLayoutY(height/2);
yAxis = new NumberAxis(yMin, yMax, yTickUnit);
yAxis.setSide(Side.LEFT);
yAxis.setMinorTickVisible(false);
yAxis.setPrefHeight(height);
yAxis.layoutXProperty().bind(Bindings.subtract((width / 2) + 1, yAxis.widthProperty()));
getChildren().setAll(xAxis, yAxis);
}
public NumberAxis getXAxis() {
return xAxis;
}
public NumberAxis getYAxis() {
return yAxis;
}
}
缩放和绘制图表中我需要的一切。
import java.util.function.Function;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.shape.Rectangle;
public class Chart extends Pane {
public Chart(Function<Double, Double> f,
double xMin, double xMax, double xInc,
Axes axes ) {
Path path = new Path();
path.setStroke(Color.ORANGE.deriveColor(0, 1, 1,0.5));
path.setStrokeWidth(1);
path.setClip(new Rectangle(0, 0, axes.getPrefWidth(), axes.getPrefHeight()));
double x = xMin;
double y = f.apply(x);
path.getElements().add(new MoveTo(
mapX(x, axes), mapY(y, axes)
));
x+=xInc;
while(x < xMax) {
if(x == xMax) {
x = xMin;
y = f.apply(x);
path.getElements().add(new MoveTo(
mapX(x, axes), mapY(y, axes)
));
}
y = f.apply(x);
path.getElements().add(new LineTo(
mapX(x, axes), mapY(y, axes)
));
x+=xInc;
}
setMinSize(Pane.USE_PREF_SIZE, Pane.USE_PREF_SIZE);
setPrefSize(axes.getPrefWidth(), axes.getPrefHeight());
setMaxSize(Pane.USE_PREF_SIZE, Pane.USE_PREF_SIZE);
getChildren().setAll(axes, path);
}
private double mapX(double x, Axes axes) {
double fx = axes.getPrefWidth() / 2;
double sx = axes.getPrefWidth() /
(axes.getXAxis().getUpperBound() - axes.getXAxis().getLowerBound());
return x * fx + sx;
}
private double mapY(double y, Axes axes) {
double fy = axes.getPrefHeight() / 2;
double sy = axes.getPrefHeight() /
(axes.getYAxis().getUpperBound() - axes.getYAxis().getLowerBound());
return -y * sy + fy;
}
}
绘图课负责制作动画,精确绘制我想要的图形。
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.scene.Group;
import javafx.util.Duration;
public class Drawing {
private double t = 0;
private double l = 1;
private Group root;
public Drawing(final Group root, double t) {
this.root = root;
this.t = t;
}
public void updateScene() {
final Chart chart = new Chart(x -> Math.exp(-(Math.pow((x-t), 2)))*Math.cos((2*Math.PI*(x-t))/l),
-1, 1, 0.01, new Axes(1000, 1000,
-1, 1, 0.1, -1, 1, 0.1)
);
Timeline timeLine = new Timeline(Timeline.INDEFINITE,
new KeyFrame(new Duration(1000),
x -> {
root.getChildren().add(chart);
}));
timeLine.setAutoReverse(true);
timeLine.play();
}
}
屏幕显示我编译后得到的内容。就像我自上而下的问题一样,不知道是什么原因导致在每个时间线阶段后不清洁。
我一直试图在我的UI中添加一个动画到我的气泡图中,但遇到了一些问题。我试图在不同的阶段增加气泡的大小,以显示渐变,但它只是画出它的全部大小,而不是在每个阶段。 体育推特计数是泡沫的最终值,我将其除以不同的数量,以显示最终值的建立。 有人有什么想法为什么这不像我期望的那样工作吗?
在一个区域表面上有很多图像。我把它们分成小组。它们应该水平滚动成链。在这里输入图像描述 我写了一些方法来工作。例如。在左边切换位置。(rects-rectangles。早先是rectangles)。 例如。将元素从中心移到左边。 等等。
我目前正在创建一个非常简单的JavaFX程序,模拟城市之间运送乘客的飞机和船只。到目前为止,我已经能够让飞机在几个城市进行短途飞行,但问题是,当我添加超过3或4架飞机时,动画速度非常慢。 我正在做的是使用Timeline类作为我的主游戏循环,清除并重新绘制画布上每帧60帧的平面图像。以下是时间表部分: 以下是我如何为平面创建新线程: 这是Plane类中定义的run()方法: 我知道代码非常混乱,但
我是JavaFX新手,我确信我在这里遗漏了一些明显的东西。我试图制作一个汽车的动画,它从左到右穿过一扇窗户,到达那里时绕着右边。用户应该能够点击up/down来调整动画的速度。当我使用一个对象时,动画开始运行,但发现你无法调整的,所以我在一个中重新编辑了它。 然而,随着时间的推移,我被卡住了。当我启动应用程序时,汽车不会显示在屏幕上。以下是我希望的一段简洁的代码片段: 还有消旋果烷: 编辑:根据@
注意:对于 Photoshop CC 之前的 Photoshop 版本,只有当您拥有 Photoshop Extended 时,本文所讨论的某些功能才可能可用。Photoshop 不提供单独的 Extended 版本。Photoshop Extended 中的所有功能是 Photoshop 的一部分。 时间轴动画工作流程 要在时间轴模式下对图层内容进行动画处理,请在将当前时间指示器移动到其他时间/