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.
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);
}
}
Comments
Leave a comment