JavaFX에서 사각형 모양의 왼쪽으로 오른쪽 이동을 구현하려고합니다. 내가 아니라 지속적으로 (내가 몇 번 동안 유지, 즉 I 키를 공개하지 않음) 중 좌/우 키를 지속적으로 사각형 이동을 누르면 다음javaFX에서 KeyPress 이벤트로 부드러운 애니메이션을 얻는 방법은 무엇입니까?
public void start(Stage primaryStage) throws Exception {
AnchorPane ancPane = new AnchorPane();
final Rectangle rect = new Rectangle();
rect.setHeight(50);
rect.setWidth(50);
ancPane.getChildren().add(rect);
Scene scene = new Scene(ancPane, 400, 200, Color.GREEN);
primaryStage.setScene(scene);
primaryStage.show();
scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent keyEvent) {
System.out.println("hello");
if(keyEvent.getCode().toString() == "RIGHT"){
System.out.println("Move Right");
TranslateTransition translateTransitionRight = new TranslateTransition();
translateTransitionRight.setDuration(Duration.millis(200));
translateTransitionRight.setNode(rect);
translateTransitionRight.setFromX(rect.getTranslateX());
translateTransitionRight.setToX(rect.getTranslateX()+30);
translateTransitionRight.play();
}
if(keyEvent.getCode().toString() == "LEFT"){
System.out.println("Move Left");
TranslateTransition translateTransitionRight = new TranslateTransition();
translateTransitionRight.setDuration(Duration.millis(200));
translateTransitionRight.setNode(rect);
translateTransitionRight.setFromX(rect.getTranslateX());
translateTransitionRight.setToX(rect.getTranslateX()-30);
translateTransitionRight.play();
}
}
});
}
: 다음은 내 코드입니다. 애니메이션이 시작된 직후에 잠깐 멈 춥니 다. 일시 중지 후 애니메이션이 부드럽게 계속됩니다.
KeyEvents로 애니메이션 일시 중지를 제거하려면 어떻게해야합니까?
나는 사각형을 이동에 대한 AnimationTimer을 사용하고, 단지 해제 키를 누르거나 키에 속도를 나타내는 속성을 업데이트 할
이 접근법의 좋은 점은 하나의 직사각형 속도를 프로그래밍 방식으로 완벽하게 제어한다는 것입니다. 키보드 반복 속도와 같은 OS 레벨 설정에 의해 결정되지 않습니다. –
안녕하세요 제임스, 왼쪽/오른쪽 키를 번갈아 누르면 애니메이션 시작 부분에 약간의 일시 중지 효과가 있습니다. 또한 여기에서 구현하는 논리에 대한 설명을 제공해주십시오. – Angom
일부 분석을 통해 나는 논리를 이해할 수 있습니다. 또한 scene.setOnKeyReleased() 내에서 작은 수정을 만들었습니다. LEFT/RIGHT 키를 놓을 때만 rectangleVelocity를 0으로 설정합니다. 그렇지 않으면 애니메이션에서 일시 중지 효과가 발생합니다. 감사. – Angom