1

私はフラッシュと as3 を使用して、フォト ローダー/ビューアー/アップロード ツールを構築しようとしています。ファイル参照を使用して、ブラウズ/ロード/アップロード機能を処理しています。現在のステージには、ユーザーが選択した画像をロードする 2 つのローダー ボックスがあります。ただし、ユーザーが決定した場合は、画像を削除して別の画像を選択できるようにする必要があります。

したがって、ファイルがロードされたイベントでは、次のコードがあります。

// Load Image into Editor Function.
function onMovieClipLoaderComplete(event:Event):void {
    var loadedContent:DisplayObject=event.target.content;
    currentLoader =event.target.loader as Loader;

    currentLoader.x=currentX;
    currentLoader.y=currentY;

    currentContent.buttonMode=true;
    currentContent.addChild(currentLoader);
    addChild(currentContent);

    currentLoader.mask = currentMask;

    addChild(replace_btn);
}

そして、私の交換ボタンには次のものがあります:

replace_btn.addEventListener(MouseEvent.CLICK, replaceImage);

function replaceImage(event:Event):void {
    currentContent.removeChild(currentLoader);
    removeChild(currentContent);
}

置換ボタンを押すと正常に動作しますが、別のイメージをローダーにロードすると、次に置換ボタンを押すと (またはそれ以降)、フラッシュ as3 ファイルで次の引数エラーが発生します。

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
at flash.display::DisplayObjectContainer/removeChild()
at MethodInfo-13()

これが何を意味するか知っている人はいますか?最初ではなく2回目以降にのみ発生するのは奇妙です. 私が持っていれば currentContent.addChild(currentLoader); addChild(currentContent); 、ロード時と currentContent.removeChild(currentLoader); removeChild(currentContent); 置換機能だけでうまくいくと思いましたか?

それも役立つ場合は、完全なas3コードを以下に示します

私は 3 ~ 4 か月しかフラッシュを学習していないので、気楽にやってください。コードが最善の方法で行われていない場合は、申し訳ありません。:)

ローレン

// Set Start Up Values.
var image1_loader:Loader = new Loader();
var image1_content:Sprite = new Sprite();
var image1_mask:Sprite = new Sprite(); image1_mask.graphics.beginFill(0x000000,1);         image1_mask.graphics.drawRect(54, 59, 330, 330); image1_mask.graphics.endFill();

var image2_loader:Loader = new Loader();
var image2_content:Sprite = new Sprite();
var image2_mask:Sprite = new Sprite(); image2_mask.graphics.beginFill(0x000000,1);     image2_mask.graphics.drawRect(384, 59, 330, 165); image2_mask.graphics.endFill();

var currentBtn;
var currentLoader;
var currentContent;
var currentMask;
var currentX;
var currentY;

replace_btn.visible=false;


// Define FileReference.
 var canvasImage:FileReference;


// Image Buttons Function.
image1_btn.addEventListener(MouseEvent.CLICK, start_fileRef);
image2_btn.addEventListener(MouseEvent.CLICK, start_fileRef);

image1_content.addEventListener(MouseEvent.MOUSE_DOWN, setCurrentSelection);
image2_content.addEventListener(MouseEvent.MOUSE_DOWN, setCurrentSelection);

function setCurrentSelection(e:MouseEvent):void {
if (e.currentTarget===image1_content){currentContent=image1_content;}
if (e.currentTarget===image2_content){currentContent=image2_content;}
}


// Browse File Function.
function start_fileRef(e:MouseEvent):void {
trace("onBrowse");
if (e.target===image1_btn){currentBtn=image1_btn; currentLoader=image1_loader;     currentContent=image1_content; currentMask=image1_mask; currentX=54; currentY=59;}
if (e.target===image2_btn){currentBtn=image2_btn; currentLoader=image2_loader; currentContent=image2_content; currentMask=image2_mask; currentX=384; currentY=59;}

canvasImage=new FileReference();
canvasImage.addEventListener(Event.SELECT, onFileSelected);
var imageTypeFilter:FileFilter = new FileFilter("JPG/PNG Files","*.jpeg; *.jpg;*.gif;*.png");
canvasImage.browse([imageTypeFilter]);
}

// Selected File Function.
function onFileSelected(event:Event):void {
trace("onFileSelected");
canvasImage.addEventListener(Event.COMPLETE, onFileLoaded);
canvasImage.addEventListener(ProgressEvent.PROGRESS, onProgress);

var canvasImageName = canvasImage.name;
canvasImage.load();
}


// File Progress Function.
function onProgress(event:ProgressEvent):void {
var percentLoaded:Number=event.bytesLoaded/event.bytesTotal*100;
trace("loaded: "+percentLoaded+"%");
}

// File Loaded Function.
function onFileLoaded(event:Event):void {
var fileReference:FileReference=event.target as FileReference;

var data:ByteArray=fileReference["data"];
trace("File loaded");
var movieClipLoader:Loader=new Loader();
movieClipLoader.loadBytes(data);
movieClipLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onMovieClipLoaderComplete);

canvasImage.removeEventListener(Event.COMPLETE, onFileLoaded);
}

// Load Image into Editor Function.
function onMovieClipLoaderComplete(event:Event):void {
var loadedContent:DisplayObject=event.target.content;
currentLoader =event.target.loader as Loader;

currentLoader.x=currentX;
currentLoader.y=currentY;

currentContent.buttonMode=true;
currentContent.addChild(currentLoader);
addChild(currentContent);

currentLoader.mask = currentMask;

addChild(replace_btn);


// Reveal Retry Button over Hover Function //
currentContent.addEventListener(MouseEvent.ROLL_OVER, hover);
replace_btn.addEventListener(MouseEvent.ROLL_OVER, hover);
currentContent.addEventListener(MouseEvent.ROLL_OUT, unhover);
replace_btn.addEventListener(MouseEvent.ROLL_OUT, unhover);

function hover(event:Event):void {
    replace_btn.visible=true;
}
function unhover(event:Event):void {
    replace_btn.visible=false;
}

replace_btn.addEventListener(MouseEvent.CLICK, replaceImage);

function replaceImage(event:Event):void {
    currentContent.removeChild(currentLoader);
    removeChild(currentContent);
}

}
4

1 に答える 1

0

これで問題currentContent.removeChild(currentLoader);ないはずですが、これ removeChild(currentContent);が問題の原因である可能性が最も高いです。として追加したcurrentContent.addChild(currentLoader)ため、コンテナー var (currentContent) も一緒に削除する必要があります。

于 2012-05-23T15:19:28.430 に答える