Итак, я сейчас пытаюсь создать проект, в котором вы можете переместить ящик. Движения Box «записываются» через ключевые кадры, и после подтверждения через SpaceBar вы можете снова воспроизвести движения. Моя проблема заключается в том, что после нажатия пробела, Box просто привязывается к своей начальной точке (100 100) на долю секунды, а затем возвращается в любое положение, в котором он находился до этого.
Вот мой код:
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.KeyCode;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;
public class Main extends Application {
static Rectangle rectangle;
Timeline timeline = new Timeline();
KeyFrame keyFrame;
@Override
public void start(Stage primaryStage) throws Exception{
initializeRectangle();
Group group = new Group();
group.getChildren().add(rectangle);
Scene scene = new Scene(group, 300, 300);
addKeyHandlers(scene);
primaryStage.setScene(scene);
primaryStage.show();
}
private void initializeRectangle(){
rectangle = new Rectangle();
rectangle.setX(100);
rectangle.setY(100);
rectangle.setHeight(50);
rectangle.setWidth(50);
rectangle.setFill(Color.BLACK);
}
private void addKeyHandlers(Scene scene){
scene.setOnKeyPressed(e -> {
if (e.getCode() == KeyCode.S) {
rectangle.setY(rectangle.getY() + 3);
keyFrame = new KeyFrame(new Duration(20), actionEvent -> {
rectangle.setY(rectangle.getY() + 3);
});
timeline.getKeyFrames().addAll(keyFrame);
}
if (e.getCode() == KeyCode.W) {
rectangle.setY(rectangle.getY() - 3);
keyFrame = new KeyFrame(new Duration(20), actionEvent -> {
rectangle.setY(rectangle.getY() - 3);
});
timeline.getKeyFrames().addAll(keyFrame);
}
if (e.getCode() == KeyCode.D) {
rectangle.setX(rectangle.getX() + 3);
keyFrame = new KeyFrame(new Duration(20), actionEvent -> {
rectangle.setX(rectangle.getX() + 3);
});
timeline.getKeyFrames().addAll(keyFrame);
}
if (e.getCode() == KeyCode.A) {
rectangle.setX(rectangle.getX() - 3);
keyFrame = new KeyFrame(new Duration(20), actionEvent -> {
rectangle.setX(rectangle.getX() - 3);
});
timeline.getKeyFrames().addAll(keyFrame);
}
if(e.getCode() == KeyCode.SPACE){
rectangle.setX(100);
rectangle.setY(100);
timeline.play();
}
});
}
public static void main(String[] args) {
launch(args);
}
}
Примечание: я абсолютный новичок в Java / JavaFX, и я не смог найти никакого решения этой проблемы на inte rnet, и мой профессор не отвечает мне (oof)