残念ながら、現在ロードされているすべてのクラスなどをFlash APIで取得する方法はありません。したがって、Component
のすべてのサブクラスを見つけることはできません。特定のメタタグのすべてのクラスを調べることも同様です。
私はクラス/関数を実行しましたが、読み込んだSWFのバイトコードを調べて、含まれているすべてのクラスを取得しました。それはこの種のものにとって唯一の選択肢です。 this linkと私の投稿の一番下をご覧ください。
したがって、選択するコンポーネントクラスのリストを指定する必要があります。頭に浮かぶ
一つ過度に複雑/実現不可能のオプションは、あなたのソースフォルダを検索しAS3コードを解析し、最終的には、いくつかのXMLファイル内のリストを作成、Component
のすべてのサブクラスを決定した外部ツールを作成しています。しかし、それは臆病のための仕事ではありません...
は、おそらくマニュアルソリューションの束の自分を考えることができますが、一つのアプローチは、例えば、アクセス可能Array
またはVector.<Class>
どこを維持することです:
public static const COMPONENT_LIST:Vector.<Class> = Vector.<Class>([
CollisionComponent,
VisualComponent,
StatsComponent,
...
...
]);
たとえば、String
という名前のリストを保持する利点は、コンポーネントクラスがSWFにコンパイルされることが保証されていることです。
クラスがコード内の他の場所で明示的に参照されていない場合、クラスはコンパイルされません。これはフレームあたり1回だけupdate()
という単純なコンポーネントで発生する可能性があり、一部のXMLファイルの文字列でのみ指定されます。明確にするために
:あなたがのXML記述を取得するためにdescribeType(classObj)
への呼び出しに続いて、それらのそれぞれのgetDefinitionByName(className)
を使用し、その後、すべてのロードされたクラスの名前のリストを取得するために、上記のリンクでコードを使用することができます各タイプ。次に、型のスーパータイプを解析して、それがComponent
になるかどうかを判断できます。 個人的にはリストをハードコードするだけです。すべてが起動時に読み込まれたクラスを検査するのはあまりにも面倒です。でも、それはあなた次第です。
これはToriousのアイデアの自動バージョンのように見えますが、これは完璧です。ありがとう!コンパイル前にFlashDevelopを実行する方法を調べる必要があります。 – Bruce
プロジェクトプロパティ - >ビルド - >ビルド前コマンドラインで見つけることができます。それは私のサンプルプロジェクトにも設定されています:) –