2011-03-23 3 views
0

각 패턴에는 Icon01, Icon02 등과 같은 링크 식별자가있는 8 개의 스프라이트가 포함 된 SWC가 있습니다.이 스프라이트 중 하나의 인스턴스를 만들 수 있습니다. 그러나플래시 AS3 XML 요소를 기반으로 SWC 기호 부착

var i:Icon01 = new Icon01(); 
this.addChild(i); 

의 형식, 내가 다른 메시지를 포함하는 XML 파일을 가지고 있고, 각각의 메시지는 같은 방식으로 표시되어있는 이미지 요소를 포함

... 
<message> 
    <image>Icon01</image> 
</message> 
... 

나는 수 있도록하고 싶습니다 XML을 구문 분석하고 해당 스프라이트를 스테이지에 첨부하십시오. 어떻게 할 수 있습니까?

내 XML 데이터 객체의 배열로 구문 분석하고 XML 요소는

var msgObj:Object = this.theMessages.messages.shift(); 
trace(msgObj.image); 

에 살고하지만 스프라이트로 캐스팅 단계에 추가하는 방법을 알아낼 수 없습니다. 나는 시도했다

var s:Sprite = msgObj.image as Sprite; 
this.addChild(s); 

그리고 난 그냥 NULL 개체에 대한 오류가 나타납니다. 어떤 도움을 주셔서 감사합니다.

답변

1

getDefinitionByName(msgObj.image) 갈 방법이 될 것입니다,하지만 당신은 당신이 그렇지 않으면 컴파일되지 않습니다 어딘가에 호출 할 수있는 각 클래스를 참조해야합니다.

이 경우 내가 호출 할 수없는 더미 함수를 만들고 거기에 모든 클래스를 나열하면 컴파일러가이를 포함하도록합니다.

또 다른 옵션은 swc를 사용하는 대신 [embed] 기능을 사용하여로드하는 것입니다. 이러한 옵션을 사용하면 컴파일되고 언제든지 호출 할 수 있습니다.

1

flash.utils.getDefinitionByName() 또는 loaderInfo를 확인하십시오. 자산이 준비 /로드 된 경우 applicationDomain.getDefinition().

import flash.utils.getDefinitionByName; 

var Image:Class = getDefinitionByName(msgObj.image) as Class; 
this.addChild(new Image()); 

HTH

+0

제안 해 주셔서 감사합니다. 이것은 내가 원했던 것에 더 가깝게 만들었지 만, 제대로 작동하기 전에 각 유형의 이미지 (예 : var i : Image01)의 변수를 정의해야했습니다. 변수 유형을 먼저 선언 할 필요없이 위에서 설명한 방법으로 자산을 첨부 할 수 있습니까? –

+0

@Matt getDefinitionByType을 사용하면 인스턴스화 할 수있는 클래스에 대한 참조를 얻을 수 있습니다. 변수 유형을 먼저 선언 할 필요없이 무엇을 의미하는지 확신 할 수 없습니다. 표시 목록에 추가하는 항목은 모두 DisplayObject입니다 (예 : 영화 클립, 비트 맵 등). –

1

FlashDevelop 4.0.1 (이전 버전에 대해서는 확실하지 않음)에서 .swf 파일을 마우스 오른쪽 버튼으로 클릭하십시오. '라이브러리에 추가'옵션 바로 아래에 '옵션'이 있습니다. '라이브러리 (참조 된 클래스 포함)'대신 '포함 라이브러리 (완전히 포함)'를 선택하십시오.

첫 번째 옵션을 사용하면 클래스를 직접 new BackgroundImage();과 같이 호출 할 때 Class가 참조되도록 포함되어 나타납니다. var backgroundImage:Class = getDefinitionByName("BackgroundImage") as Class; 클래스를 직접 호출하지 않았으므로 포함되지 않습니다.

두 번째 옵션을 선택하면 .swc get 포함 된 모든 클래스와 getDefinitionByName()이 작동합니다.