2

Flash アクション スクリプト 3 では、テキストをロードする必要がある場合は というクラスを使用しURLLoader、画像 (または .swf) をロードする必要がある場合は「Loader」というクラスを使用します。私の知る限り、.bmp をロードするURLLoaderことは、.xml を Loader にロードするのと同じくらい役に立ちません。それは計算しません。

ロードする外部アセットのキューを処理するクラスを作成していますが、ターゲット URL を分割してファイル拡張子を確認する以外に、各 URLURLLoaderに ローダーまたはローダーが必要かどうかを判断する良い方法がわかりません。 . いずれにせよ、.php URL がイメージまたはドキュメントのいずれかを返す可能性があることは想像に難くないため、使用する適切なタイプのローダー クラスを決定するためにファイル名を当てにする方法はありません。

URLごとにジョブに適したクラスを確実に検出する方法についてのアイデアはありますか?

4

3 に答える 3

2

さて、最もトリッキーな質問は、ターゲットのタイプを決定することです...

  1. URLを見るのはかなり簡単ですが、常にうまくいくとは限りません... PHPなどから画像を提供する人もいます...
  2. ブラウザのように実行できます...読み込みを開始し、それが何であるかを確認します...ここでも、複数の可能性があります...
    1. データをバイナリデータとして読み込みます...完了したら、開始シーケンスを見てください...それはPNG(89 50 4E 47 0D 0A 1A 0A)ですか?GIF ( 47 49 46 38 39 61)? JPEG ( FF E0)? SWF ( "FWS"(おかしいですね))? それ以外はテキストまたはテキストベースである必要があります...画像の場合はLoaderwithにロードしLoader::loadBytesます...ただし SWF には注意してください...そのようなグラフィック SWF のみをロードする必要があります...それ以外の場合は、適切なエンコーディングを使用して文字列に変換します (理想的には、テキスト データは utf8 で提供されます) ...それが XML、JSON、または URL エンコードされた変数であるかどうかは、すでに推測できます ... 解析を試してください (クラスXMLcom.adobe.serialization.JSONflash.net.URLVariables) ...すべてが失敗した場合、それはおそらく単なるテキストです (表面的に確認することができます...それに関する入力が必要な場合は、コメントを残してください) ...
    2. 自分でやってHTTPください...ソケットを開いてソースをロードします...さらにMIMEタイプを取得します...信頼できるものは何もありませんが、役に立ちます...HTTP実装AS3があります...データ
  3. 型を手動で渡します...純粋でシンプルです...そしてあなたは他の誰にも依存しません...

Loader と URLLoader の間にも重要な違いがあります ... Loader はドメイン間でデータを読み込むことができます。単にそのコンテンツをサンドボックス化するため、調べることができません ... URLLoader はドメインからのみ読み込むことができ、クロスドメインを使用してこれを明示的に許可するドメインからのみ読み込むことができますポリシー ファイル ...

また、単なる外部のグラフィカル アセットではなく、実際にインターフェースしたい SWF をロードする場合、LoaderContext などを制御する必要があるため、これを使用しないでください。

だから、ええ...どの方法を選んでも、頑張ってください... ;)

挨拶

back2dos

于 2009-07-09T11:14:59.920 に答える
1

Bulkloaderは URL に基づいていくつかの推測を行います。おそらくソースを覗いて、その方法を確認してください。

于 2009-07-09T06:19:24.880 に答える
0

個人的には、オブジェクトが画像または xml の場合、オブジェクトをどのようにロードするかを正確に指定します。いくつかのキュー ローダーを作成したので、URL 文字列だけを追跡するのではなく、読み込む URL、読み込まれたかどうか、読み込みの優先度、種類などを含む一連のオブジェクトを追跡することをお勧めします。ここにいくつかの疑似コードがあります。

class QueueObject{
  var URLtoLoad:String;
  private var hasLoaded:Boolean = false;
  var isDataObject:Boolean = false;
  var queuePriority:Number = 3; // 
}

キューに何かを追加したいときは、コードで。

ただ行く

var loadObject:QueueObject = new QueueObject();
loadObject.URLtoLoad = "http://theurl.com/somedata.xml";
loadObject. isDataObject= true;

// ここで、キューを管理する、作成した素晴らしいローダー クラスにこれをプッシュします。ロードするオブジェクト、this などの現在のスコープへの参照、およびこのオブジェクトがロードされたときに呼び出す関数の名前を送信します。

MyStaticLodingClass.addQueueObject(loadObject, this, myFunctionThatYouWillCallWhenDone); 

上記のクラスには、ロードするアイテム、そのタイプ、およびその URL を提供するために優先度でソートできる配列が含まれているはずです。こうすればできる

これは役立つ場合とそうでない場合があります。

それ以外の場合は、ロードしようとしているオブジェクトのタイプ (BMP など) を特定する何かを作成し、このオブジェクトのルックアップに基づいて正しいローダーを使用します。

于 2009-07-09T04:29:03.650 に答える