2012-04-03 5 views
0

큰 더미의 .SWF 파일이 있습니다. 프로그래밍 방식으로 애니메이션의 지속 시간을 가져와야합니다. 가능하면 .NET에서 수행하는 것이 좋습니다.SWF에서 Flash 애니메이션의 지속 시간을 계산 하시겠습니까?

ByteScout은 모든 싱글 프레임 애니메이션이며, 얼마나 오래 실행되는지 알아 보는 유일한 방법은 게임을 보는 것입니다.

더 좋은 솔루션이 있습니까?

답변

0

"단일 프레임"은 기본 타임 라인의 스테이지에있는 일부 자식 개체에서 애니메이션이 발생하고 있음을 의미합니다. 자녀 (또는 다른 자손)의 totalFrames을 찾으려면 더 깊게 파고 들어야합니다. 클래스가 공용 인 경우 스테이지에서 모든 객체의 프레임 길이를로드하고 표시하도록 Flash 파일을 설정하여이 작업을 수행 할 수 있습니다. .NET == ??.

+0

무대에있는 객체를 가져 오기 위해 (코드에서) Flash 파일을로드하려면 어떻게해야합니까? .NET 용 플래시 편집 라이브러리가 있습니까? (또는 다른 건?) – Jesse

+0

죄송합니다. .NET에서 Flash로 작업하지 않았습니다. 이 작업을하고 있다면 Actionscript 또는 Flex를 사용하여 SWF를로드하고 조사하는 또 다른 SWF 프로그램을 작성합니다. 도움이 더 필요하면 내 정크 이메일 ([email protected])에 문의하십시오. – iND

0

나는 내 자신을 위해서 FlashHeaderReader 클래스를 사용합니다. 아쉽게도 압축 파일을 지원하지 않습니다 (CWS-Adobe spetification으로 시작).

클래스를 약간 변경했습니다. 그리고 압축 된 swf에서도 작동 할 수 있습니다. 이 클래스에는 ICSharpCode.SharpZipLib.dll이 필요합니다. here 또는 ICSharpCode에서 다운로드 할 수 있습니다.

는 난 단지

public FlashHeaderReader(String filename) 
    { 
     Height = 0; 
     Width = 0; 
     FrameCount = 0; 
     FrameRate = 0; 
     _currentIndex = 0; 
     Error = false; 
     FileStream fs = File.OpenRead(filename); 
     _data = new byte[fs.Length]; 
     fs.Read(_data, 0, _data.Length); 
     fs.Close(); 

     if (System.Text.Encoding.ASCII.GetString(_data, 0, 3).Equals("CWS")) 
     { 
      _mIsCompressed = true; 
     } 

     if (_mIsCompressed) 
     { 
      var list = new List<byte>(_data); 
      var header = list.GetRange(1, 7).ToArray(); 
      list.RemoveRange(0, 8); 
      _data = list.ToArray(); 
      using (var str = new MemoryStream(_data)) 
      using (var dStr = new InflaterInputStream(str)) 
      { 

       var buffer = new byte[4096]; 
       list = new List<byte> {(byte) 'F'}; 
       list.AddRange(header); 
       int count; 
       while ((count = dStr.Read(buffer, 0, 4096)) > 0) 
       { 
        list.AddRange(buffer.Take(count)); 
       } 
       _data = list.ToArray(); 
      } 
     } 




     ParseHeader(); 
    } 

가 당신을 도울 것입니다 희망 생성자를 변경했습니다.

관련 문제