이것은 Android 프로그래밍에 대한 나의 진정한 진출 이었지만, Java 문제 - ScheduledThreadPoolExecutor의 작동 방식에 대한 주요한 오해 일이 있습니다. AnimatedSprites의 AndEngine 문제라는 생각을 즐겁게하기 위해). 본질적으로, 나는 onFling이 발생할 때까지 스프라이트가 움직이지 않게하기를 원한다. 스프라이트가 움직이며 1 초 후 다시 정지합니다. 사용자는 물을 통해 스프라이트를 "수영"하도록 플링 잉 (Fling-ing)을 유지해야합니다. 내가 가지고있는 문제는 애니메이션입니다. 1 초의 시간대에 두 개 이상의 플링이있는 경우 애니메이션은 중지하기 전에 한두 개의 프레임 만 표시하고 "애니메이션 중지"작업이 쌓여있는 것처럼 느낍니다. 나는이 모든 작업을 마친 후 Flings이 길고 올바른 방향인지 확인하고 확인할 것입니다. ScheduledThreadPoolExecutor를 처음 인스턴스화 할 때 풀 크기 인 1을 제공합니다. 이는 내 이해에 따라 한 번에 둘 이상의 작업을 대기열에 배치 할 수 없음을 의미합니다. 그 위에는 .schedule()을 호출하기 전에 작업을 제거하고 그냥 아무것도 없다는 것을 확인합니다. 나는 이것이 단순한 것이라고 확신한다. 이것을 올바르게 사용하는 방법에 대한 오해가있다. 여기에 코드의 관련 부분을 붙여 넣습니다.ScheduledThreadPoolExecutor를 사용하여 AndEngine에 대한 작업을 반복적으로 예약하십시오.
...
private ScheduledThreadPoolExecutor shed = new ScheduledThreadPoolExecutor(1);
private Runnable slowDown = new Runnable(){
public void run(){
if (eelSprite.isAnimationRunning())
eelSprite.stopAnimation(0);
};
};
...
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
shed.remove(slowDown);
shed.schedule(slowDown, 1000, TimeUnit.MILLISECONDS);
if (!(eelSprite.isAnimationRunning()))
eelSprite.animate(frame_duration, 0, 12, true);
return false;
}
와우, 간단한 오해가 너무 많습니다. 나는 "오, 당신은 단지 잊어 버렸습니다 ..."라고 기대하고있었습니다. 그것은 훌륭한 설명이었습니다. 내가해야 할 독서가있는 것처럼 보입니다. 집행자는 내가 생각한 것처럼 분명히 전혀 작동하지 않습니다. – NickGlowsinDark