2010-03-26 2 views
2

저는 ActionScript 3로 카드 게임을 작성하고 있습니다. 각 카드는 카드 그래픽과 플립 애니메이션이 포함 된 Flash CS4에서 내 보낸 무비 클립을 확장하는 클래스 인스턴스로 표현됩니다. 카드를 넘기려면이 무비 클립에서 gotoAndPlay를 호출합니다.시스템 시간은 프로그램이 아닌 애니메이션 속도를 결정합니다.

프레임 속도가 느려지면 모든 애니메이션을 완료하는 데 시간이 더 걸립니다. 기본적으로 Flash는 클립의 모든 프레임이 그려지는 방식으로 동영상 클립에 애니메이션을 적용합니다. 따라서 프로그램 프레임 속도가 클립의 프레임 속도보다 낮아지면 애니메이션이 더 느리게 재생됩니다.

애니메이션을 항상 같은 속도로 재생하고 같은 시간 동안 화면에 항상 결과를 표시하고 싶습니다. 프레임 속도가 너무 느려서 모든 프레임을 표시하지 않으면 프레임이 삭제됩니다. 이런 방식으로 Flash에 애니메이션을 적용 할 수 있습니까? 그렇지 않은 경우이 동작을 직접 프로그래밍하는 가장 쉬운 방법은 무엇입니까?

답변

0

Flash를 사용한 이후로 시간이 지났지 만 Flash에서 프레임 기반 애니메이션 모델을 사용하기 때문에 가능하지 않다는 것을 알고 있습니다.

그러나 Silverlight는 시간 기반 애니메이션 모델을 사용하며 프레임 속도가 허용하는 수의 중간 프레임을 그릴 것입니다.

1

Timer (또는 setInterval)을 1000/fps 밀리 초마다 트리거하여 MovieClip에 다음 프레임으로 이동하는 것이 가장 쉬운 방법입니다.

더 정확한 정보가 필요하면 의 마지막 업데이트 이후에 보낸 시간을 확인하십시오 (모든 것을 잘 설명하는 this article from Keith Peters' blog의 첫 번째 댓글에서 도난 당함).

0

트위닝 클래스 (fl.transitions.Tween)는 이러한 상황에 이상적입니다. 생성자의 마지막 인수를 TRUE으로 설정하면 애니메이션/트리거가 초 단위로 설정되며, 아는 한 FPS 손실/이득을 보상합니다.

새 객체 (Trigger(new Object(), "x")를 생성자에 전달하고 이벤트를 트리거하는 MOTION_FINISH (TweenEvent.MOTION_FINISH)에 대한 수신기를 생성하여 Timer 클래스처럼 쉽게 사용할 수 있습니다!

저는 Tweens를 사용하기 쉽습니다. 왜냐하면 모든 것이 쉽고 빠르며 지원되기 때문입니다. 그리고 말했듯이, FPS/지연 문제는 실시간으로 FPS 변경 사항을 조정하므로 해결됩니다 (아는 한!).

관련 문제