2009-04-07 8 views
1

私は、FLA/SWFライブラリに含まれるオブジェクトの名前を持つXMLファイルを設定しました。 fla/swfファイルを再コンパイルせずに素早く変更できるXMLファイルを使用して、ステージ上にオブジェクトを配置したいと考えています。もちろん、オブジェクトがインスタンス化されてステージに追加された場合にのみ、位置決めを行うことができます。問題は、構文解析されたXMLファイル名/クラス解析データをプログラムでvar作成に渡すことです。ActionScriptの3:解析されたXMLファイルから変数のオブジェクトを作成し、クラスを割り当てる

XMLファイルには、オブジェクト名とクラスが含まれています。例は次のとおりです。

<objects> 
    <object name="myBall" class="Ball"/> 
</objects> 

XMLファイルが正しく解析し、私が設定した...のために... /名前を割り当てるには、各ループクラスを各オブジェクトに追加します。

var [email protected]:[email protected] = new [email protected](); 

がこのまたは単に一時的に無知な???とIオフ私のロッカー**

答えて

4

だけで簡単には柔軟にそれを維持するために非常にまっすぐ進む方法があり、フォローアップ:あなたの迅速かつ的確な対応のための

var xml:XML = <object name="myBall" class="Ball">; 

// Looks up for a defined symbl/definition with the name 'Ball'  
var Def:Class = getDefinitionByName([email protected]); 

// Creates the instance of the Ball 
var instance:* = new Def(); 

// in case you want to assign a name to the node as a reference on the display list : 
addChild(instance).name = @xml.name; 
+0

お返事ありがとうございます。すべてのレスポンスはボールフィールドにありましたが、これは私が必要としていたものです。 Nemaste - Archie –

1

Iアム: 問題は、入力に適切な構文名/クラスペアリング、次のようなものですあなたが何をしようとしているのかわからない。

はあなたがタイプボールのある名前myBallでオブジェクトを作成しますか?

var object:Object = new Object(); 
object[objects.name] = createNewClass(objects.class); 

... 

function createNewClass(var name:String):Object 
{ 
    if(name == "Ball") 
     return new Ball(); 
    ... 
} 

これが実行しようとしているかどうかはわかりません。テキストだけで新しいボールを作成する方法があるかどうかはわかりません。誰かがその方法を知っていれば、どのようにして知りたいのでしょうか?あなたは、クラスを動的に外部から与えられた情報に基づいてオブジェクトを生成するための責任があるファクトリー・パターン(ファクトリメソッド)の種類をしようとしているようにあなたが求めているものに基づいて

+0

おかげで。 Archie –

0

、それが聞こえます。

私は、FlexとActionScriptのためのデザインパターンに探してお勧めします。私はFlexでFactory Methodをまだ書いていませんが、それほど悪くないJavaよりはるかに難しくありません。一般的に

は、ここで私はあなたのプログラムがどのように見えることを期待するものです。

  1. あなたのXMLは、(クラス型、パラメータ、など)を生成されるオブジェクトを記述します。あなたの例がこれを示すように見えます。
  2. XMLファイルがプログラムの期待通りのものであることを確認できるXSDがあります。そうでない場合、適切なエラーが出力されます。 は、検証のためにこれらの行に沿って何かをお勧めします:XMLが正しいことを保証するメカニズムが必要です。
  3. XMLにあると予想される値を抽象化しました。 Enumsやstatic/constant String値を別のユーティリティクラスで使用することをお勧めします。
  4. あなたは、XMLデータを取り込み、その内容に基づいてオブジェクトを生成し、それを必要とする人に返すだけの責任を持つFactoryクラスを持っています。

第4のポイントは、明らかにあなたが見ているものです(私は思っています)。 CookieOfFortuneの例は、このファクトリメソッドがどのように見えるかを示しています。しかし、文字列の値を変数またはEnumに抽象化することをお勧めします。

... 
var BALL_CLASS_TYPE:String = "Ball"; 
... 
function createNewClass(var name:String):Object { 
    if (name == BALL_CLASS_TYPE) 
     return new Ball(); 
} 

最初のパラメータは私にとっては紛らわしいものです。 参照というダイナミックオブジェクトを作成しようとしているようです(例:var <x>:Object<x>はXMLのデータとして定義されています)。これが可能かどうかはわかりません。私は確かにそれが必要ではないと思うだろう。

+0

詳細な対応をありがとうございます。あなたのコメントはよく受け取られ、最終的なものとみなされます。 多くの謝辞 Archie –

関連する問題