0

OK、私は Flash にあまり慣れておらず、この問題で何時間も立ち往生していたので、助けていただければ幸いです...
基本的に次のように設定された非常に複雑な FLA があります。

  1. 「シーン1」

    • いくつかのロード アニメーション (およびコード)
    • (HTML コード内の) flashvars から値を受け取り、それらを検証する AS コード
    • Scene 1 タイムラインの最後に、2 番目のムービー クリップに入ります。
  2. 「マップ合計」

    • ここでは地図が表示され、さまざまな要素が表示されます
    • ここで興味深いものは何もありません
    • しかし、それらの要素の中で、ムービー クリップ:
  3. "btn-vb"

    • ここでは、さまざまなレイヤー。そのうちの 1 つには、さらに別のムービー クリップ (vb_anim) が含まれています。
    • また、マウスがロールオーバーすると vb_anim が大きくなり、マウスが離れると逆になる (そしてクリックに反応する) AS コードも含まれています。
  4. "vb_anim"

    • ここには、いくつかの基本的なアニメーションを含むいくつかのレイヤーがあります。
    • これらのレイヤーのうち、3 つは 1 つの同じボタンの異なるバリアント (使用可能、準備ができていない、禁止されている) を表します。
    • これらの 3 つのレイヤーのそれぞれに、1 つのインスタンス化されたオブジェクトが含まれています (いくつかのトゥイーンを使用)。

必要なのは次のとおりです。
シーン 1 で受け取る flashvars に応じて、「vb_anim」でこれら 3 つのオブジェクトの 1 つまたは複数を表示または非表示にする必要があります。

シーン 1 で設定した変数にアクセスするには、次のショートカットを使用します。

var global:MovieClip = MovieClip(root);
// allows for access to the "root" variables
// e.g. global.myVar

私はすでに "btn-vb" で同じコードを使用しています (onclick イベントを定義するには、flashvars によって提供される情報にアクセスする必要があります)。

ただし、「vb_anim」内から呼び出すと、MovieClip(root) が null と評価されるようです。したがって、シーン 1 から変数にアクセスすることは不可能であり、アクセスしようとすると、Flash は「TypeError: エラー #1009」をスローします。

「vb_anim」は単に「btn-vb」に埋め込まれているため、親が表示できるのに MovieClip(root) が表示されない理由がわかりません。

私が間違ったことのアイデアはありますか?

4

2 に答える 2

1

IDE の MovieClip のタイムラインで宣言する変数は、そのクリップのみに属します。IDE のコード ジェネレーターは、使用した MovieClip 用に生成するクラスのクラス フィールドを変数から生成します。これがうまくいかなかった理由だと思います。つまり、この変数は、そのコードを含む MovieClip に関連付けられたコードにのみアクセスできる場所で宣言しましたが、呼び出したものとは反対に、グローバルではありません。

ActionScript には実際にはグローバル変数の概念がありません。変数は、クラス (フィールド、またはメンバーとも呼ばれます) にスコープを設定するか、パッケージ レベルの変数 (めったに使用されず、ほとんど推奨されない方法) にすることができます。グローバル変数の目的を果たすこともありますが、一意性を保証するメカニズムが提供されないため、間違いやセキュリティ リスクが発生する可能性があります。AS3 でこれを修正する方法はないため、完全に回避することをお勧めします。

しかし、コードの問題はこれだけではありません。MovieClipにキャストrootしているのは、型チェックを回避できるためです (コードがエラーを起こしやすくなります)。この状況を解決する適切な方法は、ルート コンテナー用のクラスを作成し、IDE (IDE ではこのクラスを「ドキュメント クラス」と呼びます) を使用してルート コンテナーに割り当てることです。これにより、を使用するたびrootにそのクラスにキャストできるようになり、コード アシストとコンパイラがより安全なコードをより迅速に記述できるようになります。

于 2012-08-28T06:52:55.550 に答える
0

タイムライン上のすべての MovieClip (または実際のローダーを除く ActionScript を介して追加されたもの) には、既にパラメーターを読み取っているのと同じ loaderInfo を指す loaderInfo プロパティがあるため、ルートを参照する必要はありません。

その上、子供が親/祖父母/その他について何かを知ることは本当に悪い習慣です. カプセル化を参照してください。代わりに、親が正しい情報を入力できるプロパティ (変数) を子に公開させます。したがって、メイン タイムラインは btn-vb に情報を提供し、btn-vb はそれを使用して vb_anim に渡します。

于 2012-08-28T01:30:12.177 に答える