2012-11-30 2 views
0

이것은 다른 애니메이션을 동시에 만드는 것에 대한 알고리즘/데이터 구조 질문입니다. 예를 들어 볼은 밀리 초 내에 한 픽셀 아래로 떨어지고, 총알은 ms로 5 픽셀 이동하고, 사람은 20 밀리 초에 한 픽셀을 이동합니다. 함께 수백 명이 있다고 생각하십시오. 모든 애니메이션을 모으고, 하나의 함수 호출로 이동해야하는 것을 이동하고, 애니메이션이 완료된 애니메이션을 제거하는 가장 좋은 방법은 무엇입니까? 각 스레드에 대한 스레드를 만들고 싶지 않습니다. 내가하고 싶은 일은 모든 물건을 움직이는 한 개의 실을 만들고 물건을 옮길 필요가있을 때까지자는 것입니다.동시 애니메이션을 만드는 가장 좋은 방법은 무엇입니까?

참고 : Java/Swing을 사용하여 JPanel에서 개체와 이미지를 인쇄하고 있습니다.

+0

합니다. 예를 들어 변형 행렬 기반 객체 애니메이션을 사용하면 일부 애니메이션을 단일 애니메이션 (번역 + 비율 조정 등)으로 결합 할 수 있습니다. – Till

+0

내가하는 일은 페인트 방법을 사용하고 Java, Swing의 다른 장소와 그림을 다른 그림으로 그리는 것입니다. – sedran

답변

1

저는 최근에 파이썬에서 비슷한 것을했습니다. 이것이 최선의 방법인지는 모르겠지만 여기에 내가 한 일이 있습니다.

다음과 같은 공용 인터페이스와 추상 Event 클래스를 만듭니다

  • tick은 - 지난 틱 이후 경과 된 시간을 계산합니다. 해당 기간에 비례하여 작업을 수행하십시오. 부드럽게 움직이는 환상을 만들기 위해서는 이것을 자주 호출해야합니다. 어쩌면 1 초에 16 번.
  • isDone - 이벤트 발생이 완료되면 true를 반환합니다.

두 개 이상의 프레임을 완료하는 데 필요한 이벤트의 하위 클래스를 만듭니다. 회전, 크기 조절, 색상 변경 등. 화면의 한 부분에서 다른 부분으로 이미지를 이동하려는 경우 TweenEvent 이벤트의 하위 클래스를 만들 수 있습니다. 각 tick 동안 이미지를 원래 위치에서 멀리 떨어 뜨리고 대상 위치쪽으로 더 멀리 다시 그리십시오.

당신과 같이, 동시에 많은 이벤트를 실행할 수 있습니다 완전히 플랫폼에 따라 다릅니다

Array<Event> events = new Array<Event>(); 

//add a bunch of TweenEvents here - one for a bullet, one for a ball, etc. 

while(True){ 
    Sleep(1/16); 
    for(Event e in events){ 
     e.tick(); 
     if (e.isDone()){events.remove(e);} 
    } 
} 
+0

답변 해 주셔서 감사합니다. 비슷한 방법을 사용하고 있으며 조금 복잡합니다. 어쩌면 우리는 더 나은 방법을 찾을 수 있습니다 :) – sedran

관련 문제