FLV를 포함 시키거나 FLV를 SWF로 컴파일하고 동적으로로드하는 것이 더 효율적입니까?

StackOverflow https://stackoverflow.com/questions/1517589

문제

최근에 나는 인기있는 Show Ghost Whisperer를위한 대화 형 뮤직 비디오를 만드는 다소 어려운 작업을 수행했습니다. 나는 프로젝트 후반에 데려 왔고 거대한 저작 파일 (약 5000 프레임 길이)에 직면했다. 이전 프로그래머 (AS2에서 모든 작업을 수행 한 사람)는 기본 타임 라인에 2 분 반 FLV를 본질적으로 내장했으며 특정 프레임 포인트에서 기본 마우스 클릭 기능과 상호 작용을 위해 클립을 추가하여 해당 클립을 다른 클립을 재생하도록 트리거링 할 수 있습니다. 일부 플래시 요소와 일부 비디오 요소가 있습니다.

(내가 만든 최종 버전은 여기에서 볼 수 있습니다. http://www.gwghostmagic.com);

깔끔한 괴물이기 때문에 나는 AS3에서 모든 것을 재건하고, 타임 라인을 완전히 버리고, 런타임에 내 요소에 오히려 내 요소를 5000 프레임 대신에 하나의 프레임 대신에 이벤트를 트리거하기로 결정했습니다. enter_frame 이벤트 리스너 로드 된 .swf가 특정 프레임에 도달 할 때 상호 작용을 트리거합니다. 프로그래머는 포인트 포인트에서 모든 것을 훨씬 더 명확하고 쉽게 조작 할 수있게 만들었습니다. 문제는 문제가 쓰레기처럼 달렸다는 것입니다.

5000 개 이상의 프레임 버전은 내 AS3 버전보다 더 빨리로드되었고 부드럽게 달렸습니다. 이벤트 청취자를 끄는 것보다 시간 줄을 삽입하고 실행하는 것이 언제 더 낫습니까? Flash가 타임 라인 기능에 더 적합합니까?

처음에 나는 스트리밍 .flv를 빌드하고 달리기로 결정했지만 .flv가 23.975 fps에서 실행되는 반면, 플래시 영화는 24fps에서 실행 되었기 때문에 .flv와 동작을 동기화하기로 결정했습니다. 아아 나는 flv 내장과 함께 .swf를 컴파일해야했다. 그런 다음 .swf는 내. SWF의 프레임 위치에 따라 재생되는 모든 함수와 추가 클립을 포함하는 Main .SWF에로드되었습니다.

내가 알아 차린 한 가지는 event.enter_frame이 전체 애플리케이션을 느리게하는 것 같습니다. 모든 프레임에서 IF 문의 200 줄의 코드 길이 목록을 실행해야하기 때문입니다. 모든 것이 내장 된 경우, 대화식 클립이 인스턴스화되는 키 프레임 만 삽입 한 다음 다른 문장을 통과하는 대신 즉시해야 할 일을 즉시 알 수 있습니다.

나는 일을 멋지고 깔끔하게 만들려고 노력 했습니까? 플래시를 플래시로 만드는 것이 더 낫습니까? 다른 직업을 찾아야합니까? 모든 입력은 대단히 감사합니다.

도움이 되었습니까?

해결책

이벤트가 동작을 트리거하는 것과 달리 모든 프레임을 트리거하는 것은 때때로 성능 차이를 설명한다고 생각합니다. 이벤트 핸들러에서 실행 된 코드 및 조건부의 양을 최소화 할 수 있기를 바랍니다.

테스트하지 않은 아이디어는 다음과 같습니다.

var dispatch:Object = {
  f1:   function () {textBubble.text = "This is Rush Hour 2";},
  f61:  function () {textBubble.text = "";},
  f111: function () {textBubble.text = "This scene has 50 takes; "
                     +"Jackie Chan said \"Square Madison\" each time.";},
  f171: function () {textBubble.text = "";}
};
addEventListener(Event.ENTER_FRAME, function (e:event) {
  if (dispatch["f"+e.target.currentFrame] is Function) {
        dispatch["f"+e.target.currentFrame]();
  }
});

이것은 사용합니다 물체 라이브 문서에 설명 된대로 연관 배열로.

다른 팁

당신은 아마 정확할 것입니다 - 모든 프레임에서 200 개 이상의 코드를 실행하면 속도가 느려집니다. 거대한 진술 목록 대신 프레임 기능을 분할하고 필요한 것만 호출하십시오. 이것은 Dlamblin의 아이디어에 대한 확장입니다.이 방법으로 각 프레임에 필요한 작은 양의 코드를 실행하고 있습니다.

function doThisOnFrame20():void
{
    //do stuff...
}

function doThisOnFrame50():void
{
    //do stuff...
}

var frameFunctions:Array = new Array();
frameFunctions[20] = doThisOnFrame20;
frameFunctions[50] = doThisOnFrame50;

function enterFrameListener(event:Event):void
{
    if(frameFunctions[swfWithFLV.currentFrame] is Function)
    {
        frameFunctions[swfWithFLV.currentFrame]();
    }
}

addEventListener(Event.ENTER_FRAME,enterFrameListener);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top