我有一个移动形状的简单JavaFX程序。移动由键控制,移动选项为左,右和跳。该程序正常运行,但有时事件处理程序就会死机。到目前为止,我发现的唯一一致性是它只在左移动后发生,但是当发生时,我看不到的任何模式。
这种行为怎么可能?我的代码坏了吗?
更新:我将shape.requestFocus();
替换为shape.setFocusTraversable(true);
,它有点帮助:现在我可以在冻结后向右移动形状,但不能向左移动。此外,如果我在“解冻”之后向左移动它,我可以进行跳跃。向左移动将再次冻结形状。
注意:形状为Rectangle shape = new Rectangle();
处理程序:
shape.setFocusTraversable(true);
shape.setOnKeyPress((e) -> {
if(e.getCode() == KeyCode.RIGHT) {
shape.moveRight();
}
else if(e.getCode() == KeyCode.LEFT) {
shape.moveLeft();
}
else if(e.getCode() == KeyCode.SPACE) {
shape.jump();
}
});
移动方法:
public void moveLeft() {
shape.setX(shape.getX() - 3);
}
public void moveRight() {
shape.setX(shape.getX() + 3);
}
public void jump() {
Arc path = new Arc();
path.setCenterX(shape.getX() + shape.getWidth() / 2 + 20);
path.setCenterY(shape.getY() + shape.getHeight() / 2);
path.setRadiusX(40);
path.setRadiusY(80);
path.setStartAngle(180);
path.setLength(-180);
PathTransition jump = new PathTransition();
jump.setPath(path);
jump.setNode(shape);
jump.setDuration(Duration.millis(1500));
jump.play();
shape.setX(path.getCenterX() + path.getRadiusX() + 15);
}