1

Flash が複数のキー フレームで同じ名前のオブジェクト インスタンスを管理する方法に関する技術文書を探しています。

これまでのところ、再生ヘッドが別のフレームに移動したときに、同じ名前のオブジェクトが同じタイプである場合、そのインスタンスは動的に設定されたプロパティと共に保持されることに気付きました。

一方、名前付きインスタンスが別のタイプであるフレームに再生ヘッドが移動するとすぐに、新しいタイプの新しいインスタンスが (元の名前で) 作成され、古いタイプの元のインスタンスは次のようになります。永久に破棄され、名前付きインスタンスに動的に設定されたすべてのプロパティが失われます (新しいインスタンスであるため)。

元のフレームに戻ると、元のインスタンスは復元されず、さらに別の変更として扱われ、新しいインスタンスが再度構築されます。この動作を説明するドキュメントはありますか?

「タイムライン インスタンスの連続性」に関する同様の質問: http://www.kirupa.com/forum/showthread.php?t=316612 プロパティが引き継がれることに私も驚きました。(インスタンス名/シンボルタイプ)ペアが次のキーフレームで変更された場合にのみ(つまり、名前付きインスタンス「obj」が両方で「ボール」を参照する場合)、Flashが新しいインスタンスを作成するランタイム機能のようですただし、「obj」が次のキーフレームの「正方形」を参照する場合、「正方形」の新しいインスタンスが作成されます)。それは理にかなっていますが、この動作は保証されていますか?

4

3 に答える 3

2

これは長すぎてコメントに投稿できませんが、フレーム スクリプトを使用して他のさまざまな動作を発見しました。

これまでのところ、異なるキー フレームで同じインスタンス名を持つオブジェクトは、次の場合にのみ新しいインスタンスを作成します。

  1. 異なるシンボル タイプまたは
  2. 同じシンボル タイプで異なるレイヤー
  3. オブジェクトを含まない中間キー フレームに移動する

つまり、インスタンス名、シンボル タイプ、およびオブジェクトが存在するレイヤーがフレーム間で同じままであり、各フレームに名前付きインスタンスが含まれている限り、フィルターと変換だけでは新しいインスタンスが作成されません。

ActionScript が関与すると、事態はさらに興味深いものになります。

---スクリプトでオブジェクトを削除する場合:---

同じインスタンス名、同じシンボル タイプ、同じ画層:

  1. フレーム 1 で removeChild を使用してオブジェクトを削除すると、フレーム 2 で新しいオブジェクトは作成されません。実際、古いオブジェクトはまだ存在しますが、表示されず、フレーム 2 からの変換は適用されません (つまり、オブジェクトは元のサイズ、フィルターなどを保持します)。
  2. フレーム 1 で removeChild を使用してオブジェクトを削除し、すぐにオブジェクトを再度追加すると、オブジェクトは存続し、フレーム 2 で表示されますが、フレーム 2 からの変換は適用されません (つまり、オブジェクトは元のサイズを保持し、フィルターなど)。

同じインスタンス名、同じシンボル タイプ、異なるレイヤー:

  1. オブジェクトを削除すると、別のレイヤーにあったため、期待どおり 2 番目のフレームに新しいオブジェクトが作成されます。次のステートメントからわかるように、異なるネット層にいることは、新しいオブジェクトが作成されることをほぼ保証します...

  2. オブジェクトを削除してすぐに再追加すると (removeChild(obj); addChild(obj);)、フレーム 2 で新しい変換を使用した新しいインスタンスがまだ作成され、元のオブジェクトが残るため、DUPLICATE が発生します。 (一方、削除/追加していなければ、キー フレームの変更によって破棄されていたはずです)。

概要

キー フレーム間で、同じインスタンス名を持つ新しいオブジェクトの作成をトリガーする唯一のことは、オブジェクトのシンボル タイプが異なるか、別のレイヤーにある場合、またはオブジェクトを含まないキー フレームにアクセスし、その後、そうするものに戻ります。新しいインスタンスが作成される原因は他にありません。ActionScript を使用してオブジェクトを削除すると (すぐに再追加したとしても)、プレーヤーは新しいキー フレーム変換をオブジェクトに適用しませんが、それ自体は新しいインスタンスの作成をトリガーしません。

于 2011-03-10T20:52:12.247 に答える
1

Flash 5 で AS を使い始めて以来、これが公式に文書化されているのを見たことがありません。

あなたの観察は私のものと一致しますが、別のケースは「同じ名前、同じタイプ、新しいキーフレーム、異なるレイヤー」であり、AVM1 でオブジェクトを再初期化します。私は実際にこれらの状況を回避しようとしているので、AVM2 が何をするかはわかりませんが、必要に応じてタイムラインで MC を再起動させるための適切な方法になる可能性があります。

于 2011-03-03T21:38:36.370 に答える
1

これは文書化された動作ではありませんが、あなたの観察は正しいです。ただし、同じインスタンス名を共有する 2 つのオブジェクトが互換性のない型である場合、Flash が 2 番目 (または後続のすべて) を強制的に「存在」させようとしたり、最初のように動作させようとしたりする可能性がある場合、問題が発生する可能性があります。それが見つけたもの。これは fp9 に特有のものかもしれませんが、同じタイムラインで 2 つの異なるオブジェクトが同じインスタンス名を共有することは絶対に避けるべきであるという十分な「傷跡」を残す動作でした。

この件について私が書いたタイムラインとインスタンス名に関するこのブログ エントリを参照して、もう少し理解を深めてください。

私が十分に触れていない可能性があるもう1つのことは、gotoAndStop / Playを使用して「スキップする」場合に「スキミング」される可能性のあるムービークリップにタイムラインサウンドをネストすると、この動作が大混乱を引き起こす可能性があることです. "タイムラインの周り。

于 2011-03-03T20:51:27.550 に答える