0

from 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);
}

ここでは、すべての画像をドラッグ可能にする必要があります。それを別のデータ型に変更することは可能ですか? b/c Loader で作業できませんか?

それらに .name プロパティを割り当てようとしましたが、後で呼び出すことができませんでした。

私が十分に明確かどうかはわかりませんが、基本的には、読み込まれたすべての画像を新しいオブジェクトとして操作する必要があります。すべての画像に変数を割り当てることは可能ですか?

ここでのワークフローに関する提案は大歓迎です。

4

3 に答える 3

2

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

または、ローダーの配列を構築することも、できればムービークリップを構築することもできます。次のようなもの: import flash.display.Loader; 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 インスタンスを配列に追加するだけです。

于 2009-08-12T10:38:03.260 に答える
1

申し訳ありませんが、あなたの質問のいくつかを理解するのに苦労しています.

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

First, what data type would you like to change it to. Second, why can't you work with Loader?

I've tried assign them .name property, but I was unable to call them later.

Why did you want to call them and how did you try to?

I need to work with every single loaded image as new object.

Each loader object encapsulates a single image object. The image is actually inside the Loader (on the .content property).


evilpenguin describes how you can store references to the loader objects inside an array so that you can access them later. That is the correct basic approach. The real question is: "What exactly are you trying to do?"

You say:

here I need to make every single image draggable.

If it is that simple, then add events directly to the loader (which encapsulates the image).

for each(var image:XML in loadedXML.image)
{
    var imgLoader:Loader = new Loader();
    var imgRequest:URLRequest = new URLRequest(image.@filepath);
    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
}

Note: I've also changed your loop to use E4X which is a much nice way of dealing with XML in Actionscript.

于 2009-08-12T13:34:53.583 に答える
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ではないため、それらに追加の子を追加することはできません)。

于 2009-08-13T11:21:13.727 に答える