2012-05-07 17 views
0

私の問題はタイトルよりも少し複雑です。私は20のフラッシュゲームの地域にいる会社に勤めています。私たちのプレイヤーにはカスタマイズ可能なアバターもあり、ゲーム内で使用されます。AS3 getDefinitionByName - エラー#1065:変数{クラス名}が定義されていません

私たちのプリローダーによって読み込まれ、GameName.swfに渡されるファイルAvatar.swfがあります。私はこのAvatarムービークリップを作り、ファクトリークラスを作成して、私たちがゲーム内で多くのインスタンスを持つことができるようにしたいと思います。

問題なく、ローダーからAvatarムービークリップのインスタンスを取得できます。 AS3のインスタンスからコンストラクタを取得する方法は2つあります。クラス

として

1)オブジェクト(myInstanceの).constructorクラス

2など)getDefinitionByName(れるgetQualifiedClassName(myInstanceの))断続的

1作品が、3で約1時間、私はnull参照のエラーを取得します結果のインスタンスによってスローされます。なぜ私は考えていませんが、それは一貫した問題ではありません。スクリプトがそこにあるのとほぼ同じですが、資産ライブラリはそうではありません。デバッグモードとリリースモードの両方で発生します。また、FlashDevelopとCS5.5を使用してコンパイルしたときにも発生します。

2 throwsエラー#1065:変数アバターが定義されていません。これは、私がアバターパッケージをインポートしておらず、アバターのダミーインスタンスを宣言していないためですが、これがすべてのポイントです。たとえば、新しい衣服を追加してアバターを変更した場合、私たちは今まで以上に拡大したゲームのリストをすべて再コンパイルして再コンパイルする必要はありません。言い換えれば、私はすべてのゲームでアバターコードを望んでいない、それは私たちのプリローダーでそれを読み込むのポイントを否定するだろう。

誰にも提案はありますか?

ありがとうございます!

+0

は[ 'ApplicationDomain'(http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7e07.html)問題のように聞こえます。他のswfsをどのアプリケーションドメインにロードしていますか? –

+0

私は 'getDefinitionByName()'を使わないでください。それは動作しますが、私はappDomain.getDefinition()で特定のアプリケーションドメインを参照する方が良いと思います。 'getDefinitionByName()'では、ローダーコンテキストで指定したアプリケーションドメインに応じて、現在のスコープにクラスを追加します。代わりに、読み込まれたコンテンツのappドメインから定義をリクエストすることができます。これは、実際に定義されている場合、常に動作します: 'loader.contentLoaderInfo.applicationDomain.getDefinition( 'definition')'。 –

答えて

1
  1. あなたのAvatar.swfが同じapplication domainにロードされていることを確認してください。
  2. アバタークラスat least once(例:Avatar.swfのドキュメントクラス)を使用していることを確認するか、Flashライブラリアイテムの場合は、Avatar.swfのフレーム1に書き出します。
+0

返信いただきありがとうございます。私は彼らがどちらも同じドメインにいると確信していますが、私はその文書を見ていないので、私は二重の外観を持つでしょう。これはObject(instance).constructorを使用して断続的なエラーを説明するでしょうか? 2番目のリンクに関してはすでに見てきましたが、コードを各ゲームの一部にしたくないのは、アバターを変更するたびにすべてのゲームを再コンパイルする必要があるからです。これは私が避けようとしていることです。 – TimL

+1

いいえ両方のカウントにはありません: 'Object(instance).constructor'ステートメントは' instance'が 'null'の場合にのみエラーを引き起こすため、ロード操作が終了していない可能性があります。そして2の重要な部分。* loaded *クラス内でクラスを使用する(またはフレーム1に書き出す)ことです。これは、コンテンツを変更すると、再コンパイルする必要があります。ただし、インスタンス化したいクラスをバイナリに含める必要があります。そうでなければ、 'getDefinitionByName'で見つかるものはありません。 – weltraumpirat

+0

ありがとう!非常に役立ちます。 – TimL

関連する問題