2017-12-18 15 views
0

창을 확장하고 문자의 이미지 뷰를 보유하는 DemoCharSprite 객체를 만들었습니다. Javafx의 초심자이기 때문에 여기서 Pane 확장을 사용했습니다 ... 그러나 스프라이트 애니메이션을 구현하면 저를 혼란스럽게합니다.JavaFX 및 스프라이트 애니메이션, 어떻게하면 내 playersprite의 사진을 변경하는 애니메이션주기를 만들 수 있습니까?

북쪽으로 걷는 아바타를 보여주는 8 개의 png 파일 세트가 있습니다. 나는 그것들을 Collection 객체에 저장했다. 그러나 javafx가 각 컬렉션을 반복하고 내 Sprite 그림을 균일하게 간격을두고 짧은 시간 내에 표시하도록 내 DemoCharSprite 창 내에서 이미지 뷰를 변경하기 위해 사용할 수있는 데이터 구조를 알지 못합니다. 순차적 인 순서로 여러 이미지를 표시하는 데 사용할 수있는 내장 된 Transition 객체가없는 것 같습니다.

누구든 해결 방법을 알고 있습니까?

private int imageIndex = 0 ; 
private final int frameTime = ... ; // milliseconds 

// ... 

ImageView imageView = new ImageView(); 
List<Image> images = new ArrayList<>(); 
// populate images... 

Timeline timeline = new Timeline(new KeyEvent(Duration.millis(frameTime), 
    e -> imageView.setImage(images.get(imageIndex++)))); 

timeline.setCycleCount(images.size()); 
timeline.play(); 

를 또는 그냥 (이이 문서의 예제의 간단한 적응) Transition 하위 클래스 수 : 다음과 같이

+1

그냥 사용하십시오' 타임 라인 '. https://stackoverflow.com/questions/9966136/javafx-periodic-background-task –

+0

@James_D를 확인해 주셔서 감사합니다. 너 영리하다. –

답변

2

당신은 타임 라인을 사용할 수 있습니다

ImageView imageView = new ImageView(); 
List<Image> images = new ArrayList<>(); 
// populate images... 

Transition animation = new Transition() { 
    { 
     setCycleDuration(Duration.millis(1000)); // total time for animation 
    } 

    @Override 
    protected void interpolate(double fraction) { 
     int index = (int) (fraction*(images.size()-1)); 
     imageView.setImage(images.get(index)); 
    } 
} 
animation.play(); 
+0

감사합니다. 이것은 정확히 원하는대로 작동합니다. 하루 종일 문서를 읽었지만 솔직히 말해서 내가 원하는 동작을 얻기 위해 키 프레임을 초기화 할 수있는 방법을 결정할 수 없었습니다. –