Universal Tween Engine 오직 계산할 수 있어야하는 것은 Tweens
과 Timelines
이 정기적으로 (각 프레임에서) 업데이트된다는 것입니다.
대부분의 상황에서 모든 트윈의 업데이트 프로세스를 처리하려면 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 스레드에서 수행되므로 동기화 문제가 발생하지 않습니다.
나는 게임 이외의 다른 엔진으로 엔진을 사용해 본 적이 없지만이 솔루션은 문제없이 작동해야합니다.
감사합니다. Aurélien Ribon에게 감사드립니다. 귀중한 의견을 말씀 드리고자합니다. 이것을 사용하여 비트 맵 이미지를 변환하고이 스레드에서 Tween.to()를 호출 할 수 있습니까? –
애니메이션을 사용하려는 각 클래스에 대해 TweenAccessor를 등록하는 경우이 항목을 사용하여 모든 항목 (비트 맵 이미지 등)에 대해 트윈을 적용 할 수 있습니다. 그런 다음 UI 스레드 (기본 안드로이드 스레드)에서 Tween.to()를 호출 할 수 있습니다. –