2011-04-29 4 views
1

현재 다른 .swf 파일에 중첩 된 .swf 파일이 있습니다.SWF 중첩의 addEventListener

상위 SWF 파일에서 나는 다른 .swf 파일을로드하기 위해 UILoader를 사용합니다.

uiLoader.source = "data/child.swf"; ; 자식 SWF 파일에서

내가

stage.addEventListener이 (KeyboardEvent.KEY_DOWN, keyPressedDown) -

그리고 내가 직접 실행할 때 완벽하게 작동합니다. 하지만 parent.swf를 통해 child.swf를 실행할 때 stage.addEvent ... null 참조 예외를 제공합니다.

문제의 원인이되는 단계는 무언가입니까? 그렇다면이 문제를 해결할 수있는 방법이 있습니까?

+0

stage.addEvent ... 하위 또는 상위에서 실행 중입니까? –

답변

2

확인이 좋은 질문은, 그것을 알아 내기 위해 나에게 조금했다.

기본적으로 Flash는이 이상한 점 (버그 일 수 있습니다)을 실제로 수행하지만 실제로 객체를 초기화하기 전에 함수를 실행합니다. 이는 무대 위에서 만 무비 클립을 초기화 할 때 발생합니다.

var mc : something = new something(); addChild (무언가)

무언가에 있습니다. 초기화 기능에서 무대에 대한 참조가있는 경우 null이됩니다. (참조 : http://www.emanueleferonato.com/2009/12/03/understand-added_to_stage-event/)

그래서 기본적으로 같은 문제를 복용하고 실제로는 계층 구조의 단계를 구축하기 전에 코드를 실행하는 것은 URLLoader을 확장 -> 무비 클립

에서 할이 같은이 문제를 해결하기 위해 지금

(이 Event.ADDED_TO_STAGE, 초기화) 하여 addEventListener; 당신의 자식 SWF : 위의

import flash.events.KeyboardEvent; 
import flash.events.Event; 
import flash.display.MovieClip; 

addEventListener(Event.ADDED_TO_STAGE, init); 


function init(event:Event){ 
    trace("test"); 
    stage.addEventListener(KeyboardEvent.KEY_DOWN, moveBox); 
    var testMC:test = new test(); 
    addChild(testMC); 
} 

function moveBox(event:KeyboardEvent){ 
    trace("a"); 
    testMC.x += 11; 
} 

내 코드, 당신은 그것의 가장 스크랩 할 수 있습니다, 그러나주의 할 점은있다 은 개체가 초기화 된 후에 실행됩니다.

+0

고마워, 그게 내가 필요한거야. – triangulito

+0

@triangulito 프레임 대신 .as 코드를 작성하는 것이 좋습니다.이 경우 사용자 정의 디스패처를 사용할 수 있으며, 추상화가 가능하므로 어디서나 실행할 수 있습니다. – Saad

+0

그래, 주로 디자이너가 만든 프로젝트에서 프레임 프로그래밍보다는 클래스로 전환하기가 힘들어서 새로운 프로젝트를 시작할 때까지 진행하고 있습니다. – triangulito

0

나는 완전히 모르겠지만 이벤트 리스너가있는 MovieClip이 다른 MovieClip 안에 중첩되어 있기 때문에 '스테이지'객체에 액세스 할 수 없기 때문일 수 있습니다.

한 가지 단계에서의 EventListener를 제거하는 것, 시도, 그래서 그것은 단순히 다음과 같습니다

addEventListener(KeyboardEvent.KEY_DOWN,keyPressedDown); 

작동 할 수있다. 또는 부모 MovieClip에 이벤트 코드를 보관할 수도 있습니다. 희망이 도움이 될 수 있습니다.

는 Debu

관련 문제