2017-02-13 179 views
0

如何在JavaFX中的AnchorPane上移動圖像?圖像應該在一段時間內移動。到目前爲止,我有:(視圖是ImageView的已經在AnchorPane)JavaFX移動圖像動畫

position = 35.0; 
    for(int x = 0; x<11; x++){ 

     TimeUnit.SECONDS.sleep(1); 
     myAnchorPane.getChildren().remove(view); 
     AnchorPane.setRightAnchor(view, position); 
     AnchorPane.setTopAnchor(view, 103.0); 
     myAnchorPane.getChildren().add(view); 
     position += 20; 

    } 
我的控制器的initialize()方法中

。然而,這是行不通的,因爲舞臺出現時圖像已經移動。

+0

您應該獲取場景中的節點當前位置,然後通過將當前位置加上某個值(在您的案例20中)來設置節點的新位置。 – Sedrick

回答

0

這是我從輔導學生的想法中創建的一堂課。

您應該使用Javafx動畫。這會隨着按鈕移動,但如果您想要看到潛水員向右移動,只需從isRightPressed if語句中刪除代碼並將其放在if語句之外即可。另外,刪除這部分:*(Math.cos(Math.toRadians(rotation)))。

import java.io.File; 
import javafx.animation.AnimationTimer; 
import javafx.event.EventHandler; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.scene.input.KeyEvent; 

/** 
* 
* @author blj0011 
*/ 
public class Diver { 
    File diverFile; 
    ImageView ivDiver = new ImageView(); 
    double rotation = 0.0; 

    boolean isUpPressed, isDownPressed, isLeftPressed, isRightPressed; 

    Diver() 
    { 
     diverFile = new File("src/img/diver.png"); 
     if(diverFile.exists()) 
     { 
      Image diverImage = new Image(diverFile.toURI().toString()); 
      ivDiver.setImage(diverImage); 
     } 

     ivDiver.setFocusTraversable(true); 
     ivDiver.setOnKeyPressed(new EventHandler<KeyEvent>() 
     { 
      @Override 
      public void handle(KeyEvent event) { 
       switch(event.getCode()) { 
        case UP: isUpPressed = true; break; 
        case DOWN: isDownPressed = true; break; 
        case LEFT: isLeftPressed = true; break; 
        case RIGHT: isRightPressed = true; break; 
       } 
      } 
     }); 

     ivDiver.setOnKeyReleased(new EventHandler<KeyEvent>() 
     { 
      @Override 
      public void handle(KeyEvent event) { 
       switch(event.getCode()) { 
        case UP: isUpPressed = false; break; 
        case DOWN: isDownPressed = false; break; 
        case LEFT: isLeftPressed = false; break; 
        case RIGHT: isRightPressed = false; break; 
       } 
      }   
     });  

     AnimationTimer timer = new AnimationTimer(){ 
      @Override 
      public void handle(long now) { 
       if(isUpPressed){if(rotation == -360){rotation = 0;} ivDiver.setRotate(rotation+=5);} 
       if(isDownPressed){if(rotation == 360){rotation = 0;} ivDiver.setRotate(rotation-=5);} 
       if(isLeftPressed) 
       {      
        ivDiver.setX(ivDiver.getX() - 2.0 * (Math.cos(Math.toRadians(rotation)))); 
        ivDiver.setY(ivDiver.getY() - 2.0 * (Math.sin(Math.toRadians(rotation)))); 
       } 
       if(isRightPressed) 
       { 
        System.out.println("moving diver right!"); 
        ivDiver.setX(ivDiver.getX() + 2.0 * (Math.cos(Math.toRadians(rotation)))); 
        ivDiver.setY(ivDiver.getY() + 2.0 * (Math.sin(Math.toRadians(rotation)))); 
       }      
      } 

     }; 
     timer.start(); 
    } 

    ImageView getDiver() 
    { 
     return ivDiver; 
    } 


} 

你的代碼可能是這個樣子。

AnimationTimer timer = new AnimationTimer(){ 
    @Override 
    public void handle(long now) { 
     System.out.println("moving diver right!"); 
     yourImageView.setX(yourImageView.getX() + 20.0); 
     //yourImageView.setY(yourImageView.getY() + 20.0);          
    } 
}; 
timer.start();