Answer to Question #285212 in Java | JSP | JSF for mmm

Question #285212

Can you give me a code to move an object or image UP, DOWN, LEFT, RIGHT continuously with one click? Example, when I click left button, it will keep moving left until I hit other button.



I'm trying to make a maze game.

1
Expert's answer
2022-01-07T01:50:03-0500
import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class Main extends Application {

    public static KeyCode direction = KeyCode.ESCAPE;
    public static final double WIDTH = 800;
    public static final double HEIGHT = 600;
    public static final double SPEED = 5;

    public static Pane createPane() {
        Rectangle rectangle = new Rectangle(20, 20, Color.GRAY);
        AnimationTimer animationTimer = new AnimationTimer() {
            @Override
            public void handle(long now) {
                switch (direction) {
                    case UP:
                        if (rectangle.getTranslateY() >= SPEED) {
                            rectangle.setTranslateY(rectangle.getTranslateY() - SPEED);
                        } else {
                            rectangle.setTranslateY(0);
                        }
                        break;
                    case DOWN:
                        if (rectangle.getTranslateY() <= HEIGHT - rectangle.getHeight() - SPEED) {
                            rectangle.setTranslateY(rectangle.getTranslateY() + SPEED);
                        } else {
                            rectangle.setTranslateY(HEIGHT - rectangle.getHeight());
                        }
                        break;
                    case LEFT:
                        if (rectangle.getTranslateX() >= SPEED) {
                            rectangle.setTranslateX(rectangle.getTranslateX() - SPEED);
                        } else {
                            rectangle.setTranslateX(0);
                        }
                        break;
                    case RIGHT:
                        if (rectangle.getTranslateX() <= WIDTH - rectangle.getWidth() - SPEED) {
                            rectangle.setTranslateX(rectangle.getTranslateX() + SPEED);
                        } else {
                            rectangle.setTranslateX(WIDTH - rectangle.getWidth());
                        }
                        break;
                }
            }
        };
        animationTimer.start();
        return new Pane(rectangle);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        Scene scene = new Scene(createPane(), WIDTH, HEIGHT);
        scene.setOnKeyReleased((KeyEvent keyEvent) -> {
            switch (keyEvent.getCode()) {
                case UP:
                case DOWN:
                case LEFT:
                case RIGHT:
                case ESCAPE:
                    direction = keyEvent.getCode();
                    break;
            }
            //System.out.println(keyEvent.getCode());
        });
        primaryStage.setScene(scene);
        primaryStage.sizeToScene();
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

Need a fast expert's response?

Submit order

and get a quick answer at the best price

for any assignment or question with DETAILED EXPLANATIONS!

Comments

No comments. Be the first!

Leave a comment

LATEST TUTORIALS
New on Blog