actionscript でステージ上のビットマップを参照するにはどうすればよいですか?
-
09-06-2019 - |
質問
actionscript 3 を使用してフラッシュ内のステージ上のビットマップを参照するにはどうすればよいですか?
フラッシュ内のステージ上にビットマップがあり、ムービーの最後に、ムービーがループする前に、それをシーケンス内の次のビットマップと交換したいと考えています。私のライブラリには、クラス名img1/img2/img3を持つアクションスクリプト用にエクスポートされた3つの画像があります。Flash でのレイヤーの設定方法は次のとおりです。
layer 5 : mask2:MovieClip
layer 4 : img2:Bitmap
layer 3 : mask1:MovieClip
layer 2 : img1:Bitmap
layer 1 : background:Bitmap
ムービーの最後に、img1 を img2 と交換して、ムービーがシームレスにループするようにしたいと思います。その後、理想的には、画像の最後に到達するまで、img2 (レイヤー 4 上) を img3 と交換し、以下同様に繰り返します。
しかし、(設計時に) すでにステージ上に配置されている画像を参照する方法がわかりません。これを行う方法を知っている人はいますか?
最後のムービーでは、Web サーバーから画像を動的にロードして (この部分のコードは持っています)、img1/img2/img3 と同様に表示する予定です。
助けていただければ幸いです。
編集:
@81ブロンコ , これを試してみましたが、グラフィックのインスタンス名がグレー表示になり、ムービークリップとボタンでのみ実行できます。それらをムーブクリップに変換し、新しい画像を追加する前にムーブクリップ内の画像をクリアすることで、半分は機能するようになりました(より単純なものを使用します) バンホーンRF 提案されました)しかし、何らかの奇妙な理由で、マスクが起動すると、クリアした画像がマスクアニメーションに戻ってきます。
解決
ステージ上の何かを参照するには、ライブラリ内のシンボルにクラス名を付けるのではなく、ステージ インスタンスに名前を付ける必要があります。
ステージ上のアイテムをクリックして、プロパティ パネルを確認します。アイテムの寸法の入力ボックスのすぐ上にテキスト入力ボックスがあるはずです。そこに名前を入力します。
コード内の他の場所で、ステージ上のそのアイテムをインスタンス名で参照できます。
他のヒント
次のようになるはずです:
imageHolder.removeChild( imageIndex )
または
imageHolder.removeChildByName( imageName )
それとその後
imageHolder.addChild( newImage )
おそらくドキュメントクラスでこのようなことを行うでしょう
for(var i:int=0; i<numChildren; i++){
trace(getChildAt(i),"This is the child at position "+i);
}
私がこれを行う理由は、私はまだ Flash IDE でコードを書いており、そのデバッガはほとんどの場合、動作させるのが非常に面倒なので、変数をトレースアウトするだけのほうが簡単であるため、その for ループを使用して現在の項目のオブジェクト名を出力することができます。ステージ上でオブジェクトを見つけるか、デバッガー プログラムを使用してオブジェクトを検索することもできます。
これで、子とその実際のステージ内のインデックスが取得できたので、getChildAt(int) を呼び出してそれらを参照したり、removeChildAt(int)、addChildAt(displayObject, int) および swapChildrenAt(int, int) を実行したりできます。 )。これらの引数の int は、trace ステートメントによって返されたインデックス位置を表し、displayObject は、明らかに、ステージまたは親 DisplayObject に追加するものを単に表します。
これら 4 つのコマンドを使用すると、ステージ上にあるムービークリップを自由に再配置して、シームレスに切り替わるように見せることができます。
@81bronco ステージ上に多数のアイテムが存在することになった場合の混乱を避けるために、特にアセットを一意に参照したい場合は、必ずステージ上でアセットに名前を付ける必要があります。
Re0sless さん、これらのアイテムをステージから削除すると、イベント リスナーやタイマーやローダーがアタッチされますか?これらのいずれかが原因で、オブジェクトがフラッシュ メモリ内に残り、適切に削除されなくなる可能性があります。また、項目を削除するだけでなく、null 化も試してみてはいかがでしょうか。場合によっては、これが参照をクリアして適切に破棄できるようにするのに役立ちます。
もちろん、あるインスタンスでアイテムを削除しても、その後のフレームからもアイテムが削除されないなど、愚かなことになる可能性もありますが、私は実際にはそうではないと思います。