2012-04-15 9 views
0

私はゲームを作っていますし、エンジニアを即座に(ハードコーディングするのではなく)エンジニアを作成できるインゲームエディタです。私はコンポーネント集約モデルを使用しているので、エンティティはコンポーネントのリストにすぎません。エンティティエディタ - コンポーネントの一覧を動的に生成する方法

コンポーネントのリストを取得または生成するにはどうすればよいでしょうか?私は本当にいくつかの巨大なregisterAllComponents()メソッドまたは何かのすべての可能なコンポーネントのエントリを手動で追加する必要はありません。

私は、基本コンポーネントクラスからすべてのコンポーネントが継承されているか、カスタムメタタグを介して継承されているという知識のいずれかを反映していると考えていましたが、派生するすべてのクラスのリストを取得する方法を見つけることができませんでしたカスタムメタタグを持つクラスまたはすべてのクラス。

どのようなオプションがありますか?

ありがとうございました。

答えて

0

私が一度行ったプロジェクトでは、ルビスクリプトを使用して、特定のパッケージ内のすべてのクラスへの参照を含むASファイルを生成しました(コンパイルに含まれていることを確認しています)。 Flashでは、実際にコードを解析する必要はありません。

また、後で使用するファクトリクラスのために、辞書にエントリを追加する(または同様のもの)ことは簡単です。

コンパイル前にプログラムを実行することは可能です(少なくともflashdevelopでは)ことができますので、手作業を追加することはできません。

編集:デモンストレーションするための基本的なFlashDevelopプロジェクトを追加しました。あなたはルビーをインストールしておく必要があります。 http://dl.dropbox.com/u/340238/share/AutoGen.zip

+0

これはToriousのアイデアの自動バージョンのように見えますが、これは完璧です。ありがとう!コンパイル前にFlashDevelopを実行する方法を調べる必要があります。 – Bruce

+0

プロジェクトプロパティ - >ビルド - >ビルド前コマンドラインで見つけることができます。それは私のサンプルプロジェクトにも設定されています:) –

0

残念ながら、現在ロードされているすべてのクラスなどを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になるかどうかを判断できます。 個人的にはリストをハードコードするだけです。すべてが起動時に読み込まれたクラスを検査するのはあまりにも面倒です。でも、それはあなた次第です。

+0

ありがとうございました。あなたの提案を自動化したバージョンなので、私はJonatanの答えを出しました。しかし、ありがとう。 – Bruce

関連する問題