0

実行時に動的にロードする必要のある多くの画像があるFlashGUIプロジェクトに取り組んでいます。

問題: 現在、クラスが初期化されるたびに、HDDからアセット(画像)が読み込まれますが、通常は時間がかかりすぎます(たとえば、100個のアイテムのリストがあり、各アイテムの背景が同じで、PNG画像が保存されています) HDDですが、アイテムのクラスが100回初期化されるため、リストをレンダリングするにはHDDから画像を100回ロードする必要があります)。また、アセットをユーザーから隠したいので、なんとかして1つのファイルにまとめたいと思います。

解決策: SWCについて考えます。Flash用のライブラリのようなものだと聞きました。しかし、私はSWCを使った経験がほとんどありません。また、画像が多すぎるため、各画像のクラス名を手動でインポートしてFLAライブラリに配置するには非常に時間がかかります。しかし、クラス名と各クラスのアセットへのパスを格納するXMLファイルがすでにあります。したがって、すべての画像を変数にロードすることはできますが、その変数をHDD上のSWCファイルに実際に書き込んで、後でライブラリとしてロードする方法がわかりません。

[MyButton.png] -RAMにロード->[myButton:Bitmap]-HDD上のSWCファイルに書き込む->[Assets.swc]-実行時にSWCファイルをインポート->[addChild(assets。 myButton)]

太字のテキストは私が欠けている部分です。

御時間ありがとうございます!どんな助けでも大歓迎です。

4

1 に答える 1

0

SWC は「プリコンパイル」するファイルであり、swf とほとんど同じですが、実際には「その場で作成」するものではありません。最大の違いは、swc は swf に「コンパイル」され、動的にロードされないことです。つまり、実行時に swc ファイルをロードすることはできません。コンパイル時に提供されます。

そのため、swc に画像を追加するとサイズが大きくなりますが、異なる swf ファイル間で画像を共有できるという利点があります。

さて、間違っていたら訂正しますが、その画像が使用されるたびに、ハード ドライブから画像をリロードしているように見えますか? 画像「Ball.png」にリンクされた「Ball」の 100 インスタンスは、そのファイルを 100 回ロードしますか?

その場合は、ImageManager を作成して、ロードされたイメージの 1 つのインスタンスを保持し、そのイメージを使用するすべてのインスタンス間で共有するようにしてみませんか?

私の知る限り、これを行う簡単な方法はありませんが、ロードされた画像をキャッシュする例に興味がある場合は、ブログ投稿を書きました (その解決策を提供するより良い方法が見つからなかったため)。

これは非常に素朴で、静的な ImageManager を中心に展開し、画像のみを読み込み、url-id でキャッシュし、既に読み込まれている場合は bitmapdata の新しいインスタンスを提供します。しかし、それは魔法のように機能し、常にハード ドライブからイメージをロードするよりもはるかに効率的です。

ここでブログ投稿を見つけることができます: http://messer1024.blogspot.se/2012/12/caching-loaded-images-in-as3.html

于 2012-12-10T19:52:03.950 に答える