2012-04-15 3 views
0

저는 게임을 만들고 있어요. 게임 내 편집기는 하드 코딩보다는 엔티티를 즉시 만들 수 있습니다. 구성 요소 집계 모델을 사용하고 있으므로 엔터티는 구성 요소 목록에 불과합니다.엔티티 편집기 - 구성 요소 목록을 동적으로 생성하는 방법?

구성 요소 목록을 얻거나 생성하는 가장 좋은 방법은 무엇입니까? 나는 거대한 registerAllComponents() 메소드 또는 가능한 모든 가능한 컴포넌트에 대한 엔트리를 수동으로 추가하고 싶지는 않다.

어쨌든 모든 구성 요소가 기본 구성 요소 클래스에서 상속 받거나 사용자 지정 메타 태그를 통해 상속된다는 지식을 통해 어떻게 든 생각할 수 있습니다.하지만 파생 된 모든 클래스 목록을 가져 오는 방법을 찾을 수 없었습니다. 맞춤 메타 태그가있는 클래스 또는 모든 클래스

어떤 종류의 옵션이 있습니까?

감사합니다.

답변

0

우리가 한 번 해본 프로젝트에서 특정 패키지의 모든 클래스에 대한 참조를 포함하는 AS 파일을 생성하기 위해 루비 스크립트를 사용했습니다 (컴파일에 포함되었는지 확인). 플래시가 파일과 동일한 이름의 클래스 만 허용한다는 것을 고려하면 실제 코드를 파싱 할 필요가 없습니다.

팩토리 클래스가 나중에 사용할 수 있도록 항목을 사전 (또는 비슷한 항목)에 추가하는 것도 간단합니다.

컴파일하기 전에 (적어도 flashdevelop에서) 프로그램을 실행할 수 있다고 생각합니다. 따라서 수동 작업이 추가되지 않습니다.

편집 : 설명하기 위해 기본 FlashDevelop 프로젝트를 추가했습니다. 루비가 설치되어 있어야합니다. http://dl.dropbox.com/u/340238/share/AutoGen.zip

+0

이것은 Torious의 아이디어를 완벽하게 자동화 한 것 같습니다. 감사! 컴파일하기 전에 FlashDevelop를 실행하는 방법을 알아봐야 할 것입니다. – Bruce

+0

프로젝트 속성 -> 빌드 -> 미리 빌드 명령 줄에서 찾을 수 있습니다. 그것은 내 샘플 프로젝트에 설정되어 있습니다 :) –

0

로드 된 클래스 나 그 밖의 모든 클래스를 플래시 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까지 확장 될지를 결정할 수 있습니다. 개인적으로 목록 대신 하드 코딩을합니다. 모든 이 시작시에로드 된 클래스를 검사하기에는 너무 지저분한 느낌이 들지만, 여러분에게 달려 있습니다.

+0

도움 주셔서 감사합니다. Jonatan의 대답은 내가 제안한 자동 버전이기 때문입니다. 그래도 고마워. – Bruce

관련 문제