JavaFX在KeyHandler中添加关键帧
因此,我目前正在尝试创建一个项目,您可以在其中移动一个长方体。盒子的移动通过关键帧“记录”,通过空格键确认后,可以再次播放移动。 我的问题是,当按下空格键时,长方体只会在一瞬间捕捉到它的起点(100100),然后返回到它之前的任何位置 这是我的密码:JavaFX在KeyHandler中添加关键帧,java,javafx,Java,Javafx,因此,我目前正在尝试创建一个项目,您可以在其中移动一个长方体。盒子的移动通过关键帧“记录”,通过空格键确认后,可以再次播放移动。 我的问题是,当按下空格键时,长方体只会在一瞬间捕捉到它的起点(100100),然后返回到它之前的任何位置 这是我的密码: import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.application.Application; import javafx.sce
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的绝对初学者,在互联网上找不到解决这个问题的任何方法,我的教授也没有回答我(oof)持续时间指定了
关键帧
和动画开始(循环)之间的持续时间,不是最后一个关键帧与具有该属性的关键帧之间的时间。将20ms指定为每个关键帧的时间
属性可以使所有关键帧同时发生…谢谢你,你解决了我的问题。祝您度过愉快的一天:)持续时间指定关键帧
与动画(循环)开始之间的持续时间,而不是最后一个关键帧
与具有该属性的关键帧之间的时间。将20ms指定为每个关键帧的时间
属性可以使所有关键帧同时发生…谢谢你,你解决了我的问题。祝你今天愉快:)