java - JavaFX 在 KeyHandlers 中添加 KeyFrames
问题描述
所以我目前正在尝试创建一个可以移动盒子的项目。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 的绝对初学者,我在互联网上找不到任何解决此问题的方法,而且我的教授没有回复我 (oof)
解决方案
推荐阅读
- angular - 从指令中获取价值以供将来使用
- docker - 如何在 CircleCI 中缓存 Docker 映像构建的 Yarn 依赖项?
- wordpress - 悬停时的 WP Bootstrap 菜单下拉菜单
- amazon-web-services - 在pyspark(2.2.0)中将CSV文件写入AWS时如何分配访问控制列表(ACL)?
- python - 如何为切片 numpy 数组提供语法糖?
- c++ - 检查框内是否有 3D 点
- c++ - 在没有管理员权限的情况下,在 C++ 中以编程方式将程序添加到启动
- python - 打印类的枚举列表
- react-native - 在 Header 中发送 JWT 令牌反应原生
- branch.io - 为什么 iOS DeepView 尝试查找 URI 时弹出警报