2012-05-22 2 views
2

Android Tween 애니메이션 용 Universal Tween Engine을 사용할 수 있습니까?android 용 Universal Tween Engine

Tween.to(getResources().getDrawable(R.drawable.ic_launcher), ParticleAccessor.POSITION_XY, 0.5f) 
    .target(0, 0) 
    .ease(Bounce.OUT) 
    .delay(1.0f) 
    .repeatYoyo(2, 0.5f) 
    .start(manager); 

이 코드를 위키 페이지에서 복사하여 대상을 드로어 블 리소스로 변경했습니다. 어떻게이 드로어 블을 대상 객체로 바꿀 수 있습니까?

답변

4

Universal Tween Engine 오직 계산할 수 있어야하는 것은 TweensTimelines이 정기적으로 (각 프레임에서) 업데이트된다는 것입니다.

대부분의 상황에서 모든 트윈의 업데이트 프로세스를 처리하려면 TweenManager을 사용해야합니다. 따라서 각 프레임에서 관리자의 .update() 메서드를 호출하면됩니다. 안드로이드 게임의 경우 모든 게임이 각 프레임에서 세계를 다시 계산하고 다시 그리는 무한 루프 인 "게임 루프"를 가지고 있기 때문에 이것은 실제로하기 쉽습니다. 따라서 관리자 업데이트 호출을이 루프에 삽입하고 voilà 만 입력하면됩니다. 그러나 순수 안드로이드 UI 응용 프로그램은 루프를 노출시키지 않으므로 어디서나 업데이트 호출을 삽입 할 수 없습니다.

그러나 내부에서 무한 루프가있는 별도의 스레드를 만들고 내부에 manager.update() 메서드를 넣어야합니다.

private final TweenManager tweenManager = new TweenManager(); 

뿐만 아니라 부울을 onPause에서 애니메이션을 중지() 당신의 ativity 방법 :

을 그것은 당신이 어딘가에 관리자를 만들 필요가

먼저 바람 :)없이 작동

private boolean isAnimationRunning = true; 

은 그럼 당신은 (예를 들어 활동 생성자에서) 스레드를 만들어야합니다

new Thread(new Runnable() { 
    private long lastMillis = -1; 

    @Override 
    public void run() { 
     while (isAnimationRunning) { 
      if (lastMillis > 0) { 
       long currentMillis = System.currentTimeMillis(); 
       final float delta = (currentMillis - lastMillis)/1000f; 

       view.post(new Runnable() {) { 
        @Override public void run() { 
         tweenManager.update(delta); 
        } 
       }; 

       lastMillis = currentMillis; 
      } else { 
       lastMillis = System.currentTimeMillis(); 
      } 

      try { 
       Thread.sleep(1000/60); 
      } catch(InterruptedException ex) { 
      } 
     } 
    } 
}).start(); 

다음으로 안드로이드 UI 코드에서 트윈을 만들 수 있습니다. 업데이트 호출은 사용자가 볼 수있는 것처럼 view.post()으로 둘러싸여 있으므로 업데이트는 기본 Android UI 스레드에서 수행되므로 동기화 문제가 발생하지 않습니다.

나는 게임 이외의 다른 엔진으로 엔진을 사용해 본 적이 없지만이 솔루션은 문제없이 작동해야합니다.

+0

감사합니다. Aurélien Ribon에게 감사드립니다. 귀중한 의견을 말씀 드리고자합니다. 이것을 사용하여 비트 맵 이미지를 변환하고이 스레드에서 Tween.to()를 호출 할 수 있습니까? –

+0

애니메이션을 사용하려는 각 클래스에 대해 TweenAccessor를 등록하는 경우이 항목을 사용하여 모든 항목 (비트 맵 이미지 등)에 대해 트윈을 적용 할 수 있습니다. 그런 다음 UI 스레드 (기본 안드로이드 스레드)에서 Tween.to()를 호출 할 수 있습니다. –