로드 된 클래스 나 그 밖의 모든 클래스를 플래시 API에서 가져 오는 올바른 방법은 없습니다. 그러므로 Component
의 모든 하위 클래스를 찾는 것이 아웃되어 있으므로 모든 클래스에서 특정 메타 태그를 검사하는 것도 가능합니다.
이전에 나는 모든 포함 된 클래스를 검색하기 위해로드 할 때 SWF의 바이트 코드를 검사하는 클래스/함수를 실행했습니다. 그것은 이런 종류의 일을위한 유일한 선택입니다. this link과 내 게시물 하단을 참조하십시오.
따라서, 선택할 구성 요소 클래스 목록을 지정해야합니다.
지나치게 복잡하거나 실현 불가능한 옵션은 원본 폴더를 검색하고 AS3 코드를 구문 분석하고 Component
의 모든 하위 클래스를 결정하는 외부 도구를 만들어서 일부 XML 파일에서 목록을 생성하는 것입니다. 하지만 그
당신은 아마 수동 솔루션을 자신의 무리 생각할 수 ... 초보를위한 일이 아니다,하지만 한 가지 방법은 예를 들어, 어딘가 접근 Array
또는 Vector.<Class>
을 유지하는 것입니다 :
public static const COMPONENT_LIST:Vector.<Class> = Vector.<Class>([
CollisionComponent,
VisualComponent,
StatsComponent,
...
...
]);
예를 들어, String
의 목록을 유지하는 것보다 한 가지 이점은 구성 요소 클래스가 SWF로 컴파일 될 수 있다는 것입니다.
클래스가 코드의 다른 곳에서 명시 적으로 참조되지 않으면 컴파일되지 않습니다. 이는 프레임 당 한 번만 update()
인 간단한 구성 요소에서 발생할 수 있으며 일부 XML 파일의 문자열로만 지정됩니다.
것은 명확히하기 : 당신의 XML 설명을 얻기 위해 다음 describeType(classObj)
를 호출 다음에 그들 각각에 대한 getDefinitionByName(className)
를 사용, 위의 모든로드 된 클래스의 이름 목록을 얻을 수있는 링크의 코드를 사용할 수 있습니다 각 유형. 그런 다음 유형의 수퍼 유형에 대해 구문 분석하면 Component
까지 확장 될지를 결정할 수 있습니다. 개인적으로 목록 대신 하드 코딩을합니다. 모든 이 시작시에로드 된 클래스를 검사하기에는 너무 지저분한 느낌이 들지만, 여러분에게 달려 있습니다.
이것은 Torious의 아이디어를 완벽하게 자동화 한 것 같습니다. 감사! 컴파일하기 전에 FlashDevelop를 실행하는 방법을 알아봐야 할 것입니다. – Bruce
프로젝트 속성 -> 빌드 -> 미리 빌드 명령 줄에서 찾을 수 있습니다. 그것은 내 샘플 프로젝트에 설정되어 있습니다 :) –