javaFX WASD控制图片移动
时间: 2024-10-25 17:14:13 浏览: 13
javaFX 图片放大缩小移动
3星 · 编辑精心推荐
在JavaFX中使用WASD键控制图片移动通常涉及到事件监听和坐标变换。首先,你需要创建一个`ImageView`对象来显示图片,并设置它的鼠标交互模式。然后,你可以注册键盘监听器来响应WASD键输入。
以下是一个简单的示例:
```java
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.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class WADDSpriteControl extends Application {
private ImageView spriteView;
private double startX = 0;
private double startY = 0;
private double speed = 5; // 移动速度
@Override
public void start(Stage primaryStage) {
Image img = new Image("path_to_your_image.png"); // 替换为你的图片路径
spriteView = new ImageView(img);
StackPane root = new StackPane();
root.getChildren().add(spriteView);
Scene scene = new Scene(root, 800, 600);
primaryStage.setScene(scene);
primaryStage.setTitle("WASD Control");
// 注册键盘监听器
scene.setOnKeyPressed(event -> {
switch (event.getCode()) {
case W:
moveX(-speed);
break;
case A:
moveY(-speed);
break;
case S:
moveX(speed);
break;
case D:
moveY(speed);
break;
default:
break;
}
});
// 设置移动方法
spriteView.setOnMousePressed(e -> { // 记录开始位置
startX = e.getX();
startY = e.getY();
});
spriteView.setOnMouseDragged(e -> { // 根据鼠标移动更新位置
spriteView.setTranslateX(startX + (e.getX() - startX));
spriteView.setTranslateY(startY + (e.getY() - startY));
});
primaryStage.show();
// 定义动画定时器,用于定期更新位置
AnimationTimer timer = new AnimationTimer() {
@Override
public void handle(long now) {
updatePosition();
}
};
timer.start();
}
private void moveX(double delta) {
spriteView.setTranslateX(Math.max(0, Math.min(getWidth() - spriteView.getImageWidth(), spriteView.getTranslateX() + delta)));
}
private void moveY(double delta) {
spriteView.setTranslateY(Math.max(0, Math.min(getHeight() - spriteView.getImageHeight(), spriteView.getTranslateY() + delta)));
}
private void updatePosition() {
// 这里可以添加更复杂的移动算法,例如平滑移动等
}
public static void main(String[] args) {
launch(args);
}
}
```
在这个例子中,当你按下W、A、S、D键时,图片会相应地向左、上、右、下移动。同时,当鼠标按下并拖动时,图片的位置会被实时更新。记得替换`"path_to_your_image.png"`为你实际的图片文件路径。
阅读全文