2011-08-03 2 views
4

런타임에 인스턴스화 할 클래스의 이름이 포함 된 문자열이 있습니다. 내가 어떻게 그럴 수 있니?ActionScript 3에서 문자열의 클래스 인스턴스화

나는 flash.utils.getDefinitionByName()를 사용하는 제안을 읽어

[Fault] exception, information=ReferenceError: Error #1065: Variable className is not defined.

+2

plication 도메인. 이것은 내가 지금까지 고민하고 포기한 것입니다. – shanethehat

답변

6

I가 함께 왔어요 가장 쉬운 방법은 단순히 밖으로 클래스 이름을 쓰기 :

var myClass:Class = getDefinitionByName("package.className") as Class; 
var myInstance:* = new myClass(); 

그러나, 나에게 다음과 같은 오류를 제공합니다 프로젝트의 어느 위치에서나 세미콜론으로 구분됩니다.

나는 Assets.as가에두고 파일을 생성 : 이것에

package { 

public class Assets {  

    // To avoid errors from the compiler when calling getDefinitionByName 
    // just list all of the classes that are not otherwise referenced in code: 
    Balloon; 
    Cloud; 
    FlyingHorse; 
    FlyingPig; 
    UFO; 
    Zeppelin;  
} 
} 

전체 코드 예제/튜토리얼은 여기에 있습니다 : http://producerism.com/blog/flashpunk-dame-and-lua-tutorial-part-6/

+0

고마워요! 이것은 문제를 해결했습니다. 나는 그것이 클래스를'import'하는 것만으로 충분하다고 생각했다. 컴파일러가 불필요하다고 생각한다면 실제로 들여 오기가없는 import 클래스인가? – Andy

+1

올바른 - 수업을 가져 왔기 때문에 수업을 게시 할 때 실제로 컴파일 된 것은 아닙니다. Flash는 각 클래스의 사용법을 확인하고 실제 코드에서 찾은 코드 만 컴파일합니다. 그래서 파일 크기에 영향을주지 않고 import flash.display. *를 할 수 있습니다. – producerism

1

다른 옵션이 같이 mxmlc에 -includes 컴파일러 인수를 사용하는 것입니다

-includes=com.mydomain.package.MyClass 

http://blogs.adobe.com/cantrell/archives/2010/09/loading-classes-dynamically-in-actionscript-3.html

클래스는 여전히 않습니다 모두가 현재의 AP를 확인하기 때문에, 정의를 얻을 수있는 플래시 위해 다른 곳에서 정의되어야한다
+0

플래시 빌더에만 사용할 수있는 것 같습니다. – BladePoint