如何使用JavaFX使图像移动

如何使用JavaFX使图像移动,java,javafx,keypress,eventhandler,Java,Javafx,Keypress,Eventhandler,所以基本上,我导入了一个汽车的图像,并试图通过使用箭头键向上、向下、向左、向右发送信号来让汽车移动。由于JavaFX与swing和awt相比使用较少,所以我在internet上能找到的资源很少。我是初学者,尝试过,但在看文档时感到困惑 以下是我所做的: public class Car extends Application{ private int xcoor = 0; private int ycoor = 0; private int velx = 0; private

所以基本上,我导入了一个汽车的图像,并试图通过使用箭头键向上、向下、向左、向右发送信号来让汽车移动。由于JavaFX与swing和awt相比使用较少,所以我在internet上能找到的资源很少。我是初学者,尝试过,但在看文档时感到困惑

以下是我所做的:

public class Car extends Application{

  private int xcoor = 0;
  private int ycoor = 0;
  private int velx  = 0;
  private int vely  = 0;

  @Override 
  public void start(Stage primaryStage) throws Exception{

    Pane pane = new Pane();
    Image carImage = new Image("car.png");
    ImageView cImage = new ImageView(carImage);
    cImage.setFitWidth(120);
    cImage.setFitHeight(80);
    pane.getChildren().addAll(cImage);
    Scene scene = new Scene(pane, 800, 500);


    scene.setOnKeyPressed(new EventHandler<KeyEvent>(){
      @Override
      public void handle(KeyEvent event){

        //How to make the car move with arrow?

      }
    });

    primaryStage.setTitle("Car"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 

  }


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

}
公车扩展应用{
私有int xcoor=0;
私有int ycoor=0;
私有int velx=0;
私有整数=0;
@凌驾
public void start(Stage primaryStage)引发异常{
窗格=新窗格();
Image carImage=新图像(“car.png”);
ImageView cImage=新的ImageView(carImage);
cImage.setFitWidth(120);
cImage.安装高度(80);
pane.getChildren().addAll(cImage);
场景=新场景(窗格,800500);
scene.setOnKeyPressed(新的EventHandler(){
@凌驾
公共无效句柄(KeyEvent事件){
//如何使汽车用箭头移动?
}
});
初级阶段。片名(“汽车”);
初级阶段。场景(场景);
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}
目前,我正在研究javaFX中处理按键的正确语法,如果有任何帮助,我将不胜感激。

您可以试试这个->

scene.setOnKeyPressed(e->{
    if(e.getCode()==KeyCode.RIGHT){
          //change the value of x and y appropriately 
          cImage.setLayoutX(x);
          cImage.setLayoutY(y)
    }
    //check for other arrow keys
});
你可以试试这个->

scene.setOnKeyPressed(e->{
    if(e.getCode()==KeyCode.RIGHT){
          //change the value of x and y appropriately 
          cImage.setLayoutX(x);
          cImage.setLayoutY(y)
    }
    //check for other arrow keys
});

只需更改
layoutX
属性

scene.setOnKeyPressed(new EventHandler<KeyEvent>(){
  @Override
  public void handle(KeyEvent event){

    if (event.getCode() == KeyCode.RIGHT) {
        cImage.setLayoutX(cImage.getLayoutX() + 10);
    } else if (event.getCode() == KeyCode.LEFT) {
        cImage.setLayoutX(cImage.getLayoutX() - 10);
    }
  }
});
scene.setOnKeyPressed(新的EventHandler(){
@凌驾
公共无效句柄(KeyEvent事件){
if(event.getCode()==KeyCode.RIGHT){
cImage.setLayoutX(cImage.getLayoutX()+10);
}else if(event.getCode()==KeyCode.LEFT){
cImage.setLayoutX(cImage.getLayoutX()-10);
}
}
});

您可能还对

感兴趣,只需更改
layoutX
属性即可

scene.setOnKeyPressed(new EventHandler<KeyEvent>(){
  @Override
  public void handle(KeyEvent event){

    if (event.getCode() == KeyCode.RIGHT) {
        cImage.setLayoutX(cImage.getLayoutX() + 10);
    } else if (event.getCode() == KeyCode.LEFT) {
        cImage.setLayoutX(cImage.getLayoutX() - 10);
    }
  }
});
scene.setOnKeyPressed(新的EventHandler(){
@凌驾
公共无效句柄(KeyEvent事件){
if(event.getCode()==KeyCode.RIGHT){
cImage.setLayoutX(cImage.getLayoutX()+10);
}else if(event.getCode()==KeyCode.LEFT){
cImage.setLayoutX(cImage.getLayoutX()-10);
}
}
});

您可能还对

“因为JavaFX非常新…”感兴趣。@takendark我不知道具体的发布日期,但我知道它正在开始取代swing和awt for GUI。如果你觉得不舒服,我应该改变我的措辞吗?第一个版本是在2008年发布的-最新版本已经发布了近3年:)我明白了。。感谢您提供的信息,顺便说一句@takendarkkDon不要将空格键与“同时按下的多个键盘键”分开。我最近玩过这个概念,花了三天时间才发现一些键盘制造商在使用空格键时很懒惰。“因为JavaFX非常新…”不错。@Takendark我不知道具体的发布日期,但我知道它正开始取代GUI的swing和awt。如果你觉得不舒服,我应该改变我的措辞吗?第一个版本是在2008年发布的-最新版本已经发布了近3年:)我明白了。。感谢您提供的信息,顺便说一句@takendarkkDon不要将空格键与“同时按下的多个键盘键”分开。我最近玩过这个概念,花了三天时间才发现一些键盘制造商在空格键方面很懒惰。谢谢你的入门代码,这与我要找的非常接近。谢谢你的入门代码,这与我要找的非常接近。