1

flash 및 as3을 사용하여 사진 로더/뷰어/업로드 도구를 만들려고합니다. 찾아보기 /로드/업로드 기능을 처리하기 위해 파일 참조를 사용하고 있습니다. 현재 스테이지에는 사용자가 선택한 이미지를로드하는 2 개의 로더 상자가 있습니다. 나는 이미지를 제거하고 사용자가 결정하면 다른 이미지를 다시 선택할 수 있어야합니다. 내가로드 할 때 잘 작동되면이 버튼을 대신 눌러에Flash AS3 - DisplayObject Argument Error -로드 된 내용을 제거하고 추가하려고합니다.

replace_btn.addEventListener(MouseEvent.CLICK, replaceImage); 

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

을하지만 :

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

그리고 내에서

내가이 버튼을 대체 :

그래서 파일로드 이벤트에이 코드를 다른 이미지를 로더에 넣습니다. 다음에 교체 버튼 (또는 이후 시간)을 누르면 플래시 as3 파일에서 다음 인수 오류가 발생합니다.

누구든지 이것이 무엇을 의미하는지 알고 있습니까? 그것은 처음에는 아니고 두 번째 이후에만 발생한다는 것이 이상합니다. 나는 가지고있는 경우에 그것을 생각했다 : 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); 
} 

} 
+0

replace_btn에 2 개의 다른 조치 (eventlisteners)가 있는지 확실하지 않습니다. 그렇다면 replaceImage 함수에서 리스너 replaceImage를 제거하여 필요하지 않을 때 호출되지 않도록해야합니다. 또한 두 번째 리스너가있는 경우 replaceImage를 리스너로 추가하기 전에 제거하십시오. 희망이 도움이된다. – Mircea

답변

0

currentContent.removeChild(currentLoader); 잘해야하지만,이 removeChild(currentContent);은 대부분 문제의 근원이다. currentContent.addChild(currentLoader)으로 추가했기 때문에 컨테이너 var (currentContent)도 제거해야합니다.

관련 문제