2015-01-22 3 views
0

CreateJS를 사용하여 HTML5로 변환하는 플래시 파일이 있습니다. Flash 파일은 GSAP 타임 라인 및 기타 기능이 많은 MPU 배너의 경우 상당히 복잡합니다. 나는 특정 기능 (예 : TimelineMax에서 지연된 호출 후에 특정 애니메이션을 수행하는 등)을 변환했지만 한 가지로 붙어 있습니다.CreateJS 무비 클립에 함수 추가

플래시 파일에서 약 20 개의 그룹이 있습니다. MovieClip의 인스턴스 ("Pulsar"). Pulsar MC에는 몇 가지 간단한 함수를 가진 프레임 스크립트가 있습니다. 예를 들어, "pulse"는 전역 부울 "killPulses"가 false 인 것을 듣고 무작위로 (MC의 타임 라인을 따라 실행하여) "killPulses"는 사실입니다.

function pulse(time:Number = 1.5):void { 
    if (isPulsing == false) { 
     isPulsing = true; 
     TweenLite.to(this, time, {frameLabel:"pulse_end", onComplete:resetPulse}); 
    } 
} 

function resetPulse():void { 
    gotoAndStop("pulse_start"); 
    isPulsing = false; 
} 


function callRandomPulse(e:Event):void { 
    var ran = Math.random(); 

    if (MovieClip(root).killPulses == true) { 
     freqNumber = 0; 
    } else { 
     freqNumber = defaultFreq; 
    } 

    if (ran < freqNumber) { 
     pulse(); 
    } 
} 

TweenLite.ticker.addEventListener("tick", callRandomPulse); 

이 Flash에서 매우 쉽게했지만, 스크립트가 CreateJS에 포팅되지 않는, 어떻게 JS에서 lib.Pulsar 객체에 이러한 기능을 추가하는 방법은 무엇입니까? 차라리 주 .js 파일 밖에서 파일을 만들면 다른 파일로 다시 내보낼 때마다 덮어 쓰게됩니다. lib.Pulsar의 내부 속성에 액세스 할 수없는 것 같습니다 (콘솔 로그는 속성이 아닌 함수 스크립트를 제공합니까?). 그게 기능을 추가하는 가장 좋은 방법입니까 아니면 더 적합한 방법입니까?

의도 한 효과는 펄사 그룹이 무작위로 펄스를 보내고 서로 동기화되지 않는 것이지만 '활성화'되는 동안에 만 발생합니다.

감사합니다.

답변

0

Flash에는 메서드에 대한 클로저가 있으므로 올바른 범위에서 호출됩니다. 자바 스크립트는 그렇지 않습니다. 이러한 함수는 익명으로 정의되었습니다. 프레임의 함수 (내 보낸 AS 체크 아웃)에 있기 때문에 함수가 호출 될 때 범위가 손실됩니다. 사용

function pulse() {} 
pulse(); 

:

this.pulse = function() {} 
this.pulse(); 

당신은 또한 전화도 TweenLite 같은 유틸리티에 의해 보장에이

당신은 this

대신에 기능을 저장하여이 문제를 해결할 수 범위를 포함하십시오. TweenLite에서 범위 지정 메소드에 대한 지원이 없다면 함수를 수동으로 수행해야합니다. 함수를 바인딩하는 것은 범위를 제공하는 쉬운 방법이지만 모든 브라우저에서 지원되지는 않습니다.

TweenLite.ticker.addEventListener("tick", callRandomPulse.bind(this)); 

희망이 있습니다. 이것에 찔림을 가지고 자유롭게 느끼십시오, 당신이 아직도 끊는 경우에 저에게 알려주십시오, 나는 원조를 더 제공 할 수있다.

+0

감사합니다. Lanny - 범위를 정하는 항목을 알아 냈습니다 (다른 질문 [here] (http://stackoverflow.com/questions/28108646/scope-i-think-challenge-in-javascript) 참조). 그러나 그것은 심볼의 각 인스턴스에 함수를 추가하는 것이 었습니다. 일단 심볼이 이미 캔버스에 있으면. 내가 어쨌든이 func을 심볼의 메소드로 추가한다면 어떨까요? 캔버스에 추가 된 (아마도 프로토 타입을 통해?), 왜냐하면 심볼의 속성에 액세스하여 변경할 수 없기 때문입니다. 죄송합니다. 저는 JS 구조가 아니라고 생각합니다. 나는 호기심 많은 디자이너라고 생각합니다. –

+0

Flash 내용을 _ 라이브러리 _로 사용하고 외부에서 코딩하는 것이 좋습니다. 프레임 스크립트에서 기능을 믹싱하는 대신 Sprites 및 MovieClips를 구성하는 고유 한 클래스를 만들 수 있습니다. – Lanny

+0

안녕하세요 Lanny - 천천히 회신 해 주셔서 대단히 감사합니다.Flash 콘텐츠를 라이브러리로 사용하는 것에 대한 귀하의 의견은 내가하고 싶은 것입니다 (예 : CreateJS가 출력하는 'lib'객체 (모든 심볼 정의가 포함 된 경우)). 어떻게 의미합니까? 커스텀 메소드와 속성으로 주어진 심볼의 클래스를 확장합니다. –

관련 문제