2017-02-13 8 views
0

JavaFXのアンカーパネルでイメージを移動するにはどうすればよいですか?画像は一定期間にわたって動くはずです。これまで私は持っていました:(ビューは既にAnchorPaneのImageViewです)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(); 
関連する問題