2009-08-12 58 views
0
私は

AS3の割り当てクラスにXMLロード要素

は最初、私はすべての単一のイメージを作成する必要があり、ここでXML

import flash.display.Loader; 
import flash.net.URLRequest; 
    var loader:Loader  = new URLLoader(); 
    var request:URLRequest = new URLRequest("myXML.xml"); 
    loader.load(request); 

loader.addEventListener(Event.Complete, proessFile); 
function processFile(e:Event):void 
{ 
var loadedXML:XML = (e.target.data); 
} 

//load set of images from XML file 

for (var i:uint = 0; i < loadedXML.image.length(); i++) 
{ 
    var imgLoader:Loader  = new Loader(); 
    var imgRequest:URLRequest = new URLRequest (loadedXML.img[i].attribute("filepath")); 
    imgLoader.load(imgRequest); 
    addChild(imgLoader); 
} 

をロードし、それらに対話をXMLからで一連の画像をロードして割り当てる必要があり

ドラッグ可能。それを別のデータ型に変更することは可能ですか?b/c私はLoaderで作業できませんか?

名前のプロパティを割り当てようとしましたが、後で呼び出すことができませんでした。

私は分かりませんが、私は十分にはっきりしていますが、本質的には、読み込まれたすべてのイメージを新しいオブジェクトとして処理する必要があります。すべての単一のイメージに変数を割り当てることは可能ですか?

ここでの作業フローに関する提案は非常に高く評価されます。

答えて

2

ステージに追加するので、名前を付けて、ステージのgetChildByNameメソッドで呼び出すことができます。

または、ローダーの配列を作成することもできますし、ムービークリップを作成することもできます。何かのように: import flash.display.Loader; import flash.net.URLRequest;

var loader:Loader  = new URLLoader(); 
var request:URLRequest = new URLRequest("myXML.xml"); 
loader.load(request); 

var images:Array = new Array(); 

loader.addEventListener(Event.Complete, proessFile); 
function processFile(e:Event):void 
{ 
var loadedXML:XML = (e.target.data); 
} 

//load set of images from XML file 

for (var i:uint = 0; i < loadedXML.image.length(); i++) 
{ 
    // create a new movie clip 
    var tmpMovieClip:MovieClip = new MovieClip(); 
    var imgLoader:Loader  = new Loader(); 
    var imgRequest:URLRequest = new URLRequest (loadedXML.img[i].attribute("filepath")); 
    imgLoader.load(imgRequest); 
    // add the loader to the movie clip's display list 
    tmpMovieClip.addChild(imgLoader); 
    // add the movieclip to the previously declared array 
    images.push(tmpMovieClip); 
} 

このようにして、必要に応じて配列の任意の要素を呼び出して使用できます。 MoviClipsが不要な場合は、LoaderインスタンスをArrayに追加するだけです。

+0

ありがとうございました。 Spriteにオブジェクトを配置し、配列でアクセスします。 –

1

私はあなたの質問を理解することができません。

これを別のデータ型に変更することはできますか?b/cローダーでは動作しませんか?

まず、どのデータ型に変更しますか?第二に、なぜローダーで作業できないのですか?

名前のプロパティを割り当てようとしましたが、後で呼び出すことができませんでした。

なぜあなたはそれらに電話したいのですか?どのように試しましたか?

すべての読み込まれたイメージを新しいオブジェクトとして処理する必要があります。

各ローダーオブジェクトは、1つのイメージオブジェクトをカプセル化します。イメージは実際にはローダー内にあります(.contentプロパティ上)。


evilpenguinは、後でアクセスできるように、配列内のローダオブジェクトへの参照を格納する方法について説明しています。それが正しい基本的なアプローチです。本当の質問は、「あなたは正確に何をしようとしていますか?」

あなたは言う:

ここで私は一つ一つの画像をドラッグできるようにする必要があります。

単純な場合は、イベントをローダーに直接追加します(イメージをカプセル化します)。

for each(var image:XML in loadedXML.image) 
{ 
    var imgLoader:Loader = new Loader(); 
    var imgRequest:URLRequest = new URLRequest([email protected]); 
    imgLoader.load(imgRequest); 
    addChild(imgLoader); 

    // NOTE: you may want to wait until it is done loading 
    // before you add drag and drop behaviour although 
    // that isn't strictly necessary 
    makeDraggable(imgLoader); 
} 


function makeDraggable(loader:Loader):void 
{ 
    loader.addEventListener(MouseEvent.MOUSE_DOWN, startDrag); 
    loader.addEventListener(MouseEvent.MOUSE_UP, stopDrag); 

    // NOTE: I'll leave it up to you to decide 
    // how you want to implement drag and drop 
} 

注:私もActionScriptでXMLを扱う多くの良い方法であるE4Xを使用するようにループを変更しました。

+0

ローダーにイベントを追加する方が理論的には効率的ですが、使用上の問題があります。Loaderクラスには.buttonModeプロパティがないため、マウスカーソルをホバー上で変更することはありません。つまり、ユーザーがオブジェクトにマウス操作があることを必ずしも認識していないことを意味します。そのため、パフォーマンスが不条理な問題ではない場合は、ローダーをムービークリップで囲むことになります。私は何かを逃していますか、これを行うための他の方法はありますか? – evilpenguin

+0

私は何をしようとしているのですか?私はすべての読み込まれた項目の機能を拡張するクラスを作成したい。私はそのクラスにすべての対話性を入れたいと思っています。すべてのアイテムの単一クラス。 –

0

イメージの「コピー」を作成するには、次の手順を実行します。

private function contentLoaderInfo_completeHandler(event:Event):void 
{ 
    var loaderInfo:LoaderInfo = event.target as LoaderInfo; 
    var originalBitmap:Bitmap = loaderInfo.content as Bitmap; 
    var newBitmap:Bitmap = new Bitmap(originalBitmap.bitmapData.clone()); 
    images.push(addChild(newBitmap)); 
} 

このようにすれば、ローダーオブジェクトから完全に切り離され、完全に処分できます。もちろん、evilpenguinがSpritesやMovieClipsにそれらを追加してステージに追加することもできます(BitmapクラスはDisplayObjectContainerではないため、余分な子を追加することはできません)。

関連する問題