2009-05-14 3 views
0

그래, 내가 어떻게했는지 모르겠다. 아마 AS3의 신이 코드를 작성한 직후에 버그가 없으면 나에게 화가 났을 것이다. 그러나 나는 아주 이상한 문제가있다. 세 개의 다른 버튼이 있고 서로 중첩되지 않으며 함수를 호출하는 마우스 클릭 이벤트 리스너가 있습니다. 이 3 개의 버튼 중 하나를 클릭 할 때마다 swf의 수명에서 이전의 모든 버튼을 더한 함수를 호출합니다. 솔직히 말해서 나는 이것이 어떻게 일어나고 있는지 전혀 모른다. 나는 충격을 받았다. 나는 충격을 느낀다. 어떻게 된 일인가? eventListeners에서 뭔가가 있습니까? 아마도 URLLoader와 함께 뭔가? 나도 몰라, 나는 모든 길을 걷어 봤고 나는 아무것도 없어. 그래서 나는 똑똑한 코더의 법정에 나 자신을 던진다. 당신 중 하나가 신사를 존경하고 신사는 내가 잘못하고있는 것을 알고있다. 가난한 코더의 영혼을 불쌍히 여겨라.ActionScript 3.0의 현재 함수와 이전의 모든 함수를 호출했습니다.

문서 클래스 파일Pastie

package { 

    import gs.TweenMax; 
    import gs.easing.*; 
    import flash.display.*; 
    import flash.events.*; 
    import flash.ui.Keyboard; 
    import flash.net.*; 
    import flash.external.ExternalInterface; 
    import FullScreenScrollBar; 

    public class Gessner extends MovieClip { 

     //====================================Declare Variables================================// 
     var objectsArray:Array = ["whatwedo_bkg", "whoweare_bkg", "howmuch_bkg", "needsome_bkg"]; 
     var images:Array = []; 
     var instances:Array = []; 
     var imageInstances:Array = []; 
     var paginationButtons:Array =[]; 
     //=====================================================================================// 

    private var xmlLoader:URLLoader = new URLLoader(); 
    private var xmlData:XML = new XML(); 

    //====================================================================================== 
    public function initXML(e:Event) { 
    //====================================================================================== 
     var target:String = e.currentTarget.name; 
     if (e.currentTarget.name == "recent_projects" || e.currentTarget.name == "whoweare") { 
      xmlLoader.addEventListener(Event.COMPLETE, onCompleteXML); 
      xmlLoader.load(new URLRequest("http://www.gessnerengineering.com/projects")); 
     } else if (e.currentTarget.name == "our_staff") { 
      xmlLoader.addEventListener(Event.COMPLETE, onCompleteXML); 
      xmlLoader.load(new URLRequest("http://www.gessnerengineering.com/profiles")); 
     } 

     //======================================================================== 
     function onCompleteXML(e:Event):void { 
     //======================================================================== 
      xmlData = new XML(e.currentTarget.data); 
      makePagination(); 
      trace("onCompleteXML() target: " + target); 
      if (target == "recent_projects" || target == "whoweare") { 
       trace("loadProjectXML() got called from onCompleteXML();"); 
       loadProjectsXML(0, xmlData); 
      } else if (target == "our_staff") { 
       loadStaffXML(0, xmlData); 
      } 
     } 

     //======================================================================== 
     function makePagination():void { 
     //======================================================================== 
      var pages:Number; 
      trace("makePagination() target: " + target); 
      if (target == "recent_projects" || target == "whoweare") { 
       pages = Math.ceil(xmlData.project.length()/13); 
      } else if (target == "our_staff") { 
       pages = Math.ceil(xmlData.profile.length()/13); 
      } 
      for (var i:Number = 0; i < pages; i++) { 
       var tmp:pageNum = new pageNum(); 
       var startX:Number = -(((pages * 50) - 10)/2); 
       tmp.Id = i * 13; 
       tmp.x = startX; 
       startX += 50; 
       tmp.y = 0; 
       tmp.label.text = String(i+1); 
       tmp.buttonMode = true; 
       tmp.mouseChildren = false; 
       tmp.useHandCursor = true; 
       tmp.addEventListener(MouseEvent.CLICK, onChangePage); 
       Gessner(root).pages.whoweare_bkg.pagination.addChild(tmp); 
       paginationButtons.push(Gessner(root).pages.whoweare_bkg.pagination.getChildByName(tmp.name)); 
      } 
     } 

     //======================================================================== 
     function onChangePage (e:MouseEvent):void { 
     //======================================================================== 
      if (target == "recent_projects" || target == "whoweare") { 
       trace("loadProjectXML() got called from onChangePage();"); 
       loadProjectsXML(e.currentTarget.Id as Number, xmlData); 
      } else { 
       loadStaffXML(e.currentTarget.Id as Number, xmlData); 
      } 
     } 
    } 


    //====================================================================================== 
    public function loadProjectsXML(startNum:Number, xmlData:XML):void { 
    //====================================================================================== 
     removeAll(); 
     var index:int = 1; 
     var endNum:Number = startNum + 13; 
     if (endNum > xmlData.project.length()) { 
      endNum = xmlData.project.length(); 
      //trace("projectENDNUM" + endNum); 
     } 
     for(startNum; startNum < endNum; startNum++) { 
      var instance:String = "cont" + index; 
      var imageURL:String = "http://www.gessnerengineering.com/system/files/" + xmlData.project[startNum].assets.asset[0]["id"] + "/thumb/" + xmlData.project[startNum].assets.asset[0]["file-file-name"]; 

      loadImage(imageURL, instance); 
      Gessner(root).pages.whoweare_bkg[instance].title.text = xmlData.project[startNum].name; 
      Gessner(root).pages.whoweare_bkg[instance].description.text = xmlData.project[startNum].description; 
      instances.push(instance); 

      index++; 
     } 
    } 

    //======================================================================================= 
    public function loadStaffXML(startNum:Number, xmlData:XML):void { 
    //======================================================================================= 
     removeAll(); 
     var index:int = 1; 
     var endNum:Number = startNum + 13; 
     if (endNum > xmlData.profile.length()) { 
      endNum = xmlData.profile.length(); 
      ////trace("endNUM" + endNum); 
     } 
     for(startNum; startNum < endNum; startNum++) { 
      var instance:String = "cont" + index; 
      var imageURL:String = "http://www.gessnerengineering.com/system/avatars/" + xmlData.profile[startNum]["id"] + "/thumb/" + xmlData.profile[startNum]["avatar-file-name"]; 

      loadImage(imageURL, instance); 
      Gessner(root).pages.whoweare_bkg[instance].title.text = xmlData.profile[startNum]["user-id"]; 
      Gessner(root).pages.whoweare_bkg[instance].description.text = xmlData.profile[startNum]["bio"]; 
      instances.push(instance); 
      index++; 
     } 
    } 

    //======================================================================================= 
    private function loadImage(imageURL:String, instance:String):void { 
    //======================================================================================= 
      var imageLoader:Loader = new Loader(); 
      var imageRequest = new URLRequest(imageURL); 

      imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); 
      imageLoader.load(imageRequest); 

      function onComplete(e:Event) { 
       var image:Bitmap = (Bitmap)(e.currentTarget.content); 
       Gessner(root).pages.whoweare_bkg[instance].thumb.addChild(image); 
       images.push(Gessner(root).pages.whoweare_bkg[instance].thumb.getChildByName(image.name)); 
       imageInstances.push(instance); 
       //imageLoader.unload(); 
      } 
    } 

    //======================================================================================= 
    private function removeAll():void { 
    //======================================================================================= 
     var lengthOfIndex:uint = instances.length; 
     /*for each(var button:DisplayObject in paginationButtons) { 
      Gessner(root).pages.whoweare_bkg.pagination.removeChild(button); 
     }*/ 
     for (var i:uint = 0; i < lengthOfIndex; i++) {    
      Gessner(root).pages.whoweare_bkg[instances[i]]["title"].text = ""; 
      Gessner(root).pages.whoweare_bkg[instances[i]]["description"].text = ""; 
      try { 
      Gessner(root).pages.whoweare_bkg[imageInstances[i]].thumb.removeChild(images[i]); 
      } catch (ArgumentError) { 
       //trace("error: " + images[i].name + "::" + instances[i]); 
      } 
     } 
     paginationButtons.splice(0, paginationButtons.length); 
     images.splice(0, lengthOfIndex); 
     imageInstances.splice(0, lengthOfIndex); 
     instances.splice(0, lengthOfIndex);   
    } 
} 

문서의 타임 라인 작업

this.pages.whoweare_bkg.recent_projects.addEventListener(MouseEvent.CLICK, initXML); 
this.pages.whoweare_bkg.our_staff.addEventListener(MouseEvent.CLICK, initXML); 
this.whoweare.addEventListener(MouseEvent.CLICK, initXML); 

출력Pastie

##first click 
makePagination() target: whoweare 
onCompleteXML() target: whoweare 
loadProjectXML() got called from onCompleteXML(); 
projectENDNUM3 

##second click 
makePagination() target: whoweare 
onCompleteXML() target: whoweare 
loadProjectXML() got called from onCompleteXML(); 
projectENDNUM3 
makePagination() target: recent_projects 
onCompleteXML() target: recent_projects 
loadProjectXML() got called from onCompleteXML(); 
projectENDNUM3 

##third click 
makePagination() target: whoweare 
onCompleteXML() target: whoweare 
loadProjectXML() got called from onCompleteXML(); 
projectENDNUM3 
makePagination() target: recent_projects 
onCompleteXML() target: recent_projects 
loadProjectXML() got called from onCompleteXML(); 
projectENDNUM3 
makePagination() target: recent_projects 
onCompleteXML() target: recent_projects 
loadProjectXML() got called from onCompleteXML(); 
projectENDNUM3 

##fourth click 
makePagination() target: whoweare 
onCompleteXML() target: whoweare 
loadProjectXML() got called from onCompleteXML(); 
projectENDNUM3 
makePagination() target: recent_projects 
onCompleteXML() target: recent_projects 
loadProjectXML() got called from onCompleteXML(); 
projectENDNUM3 
makePagination() target: recent_projects 
onCompleteXML() target: recent_projects 
loadProjectXML() got called from onCompleteXML(); 
projectENDNUM3 
makePagination() target: recent_projects 
onCompleteXML() target: recent_projects 
loadProjectXML() got called from onCompleteXML(); 
projectENDNUM3 

and so on and so on 

답변

2

오, 알겠습니다. 그것은이 부분에서 여기 :

xmlLoader.addEventListener(Event.COMPLETE, onCompleteXML); 
xmlLoader.load(new URLRequest("http://www.gessnerengineering.com/projects")); 

이 코드를 호출 할 때마다, 당신은 xmlLoader에 새로운 이벤트 리스너를 추가합니다. 이후에 호출 할 때마다 onCompleteXML을 +1 번 호출합니다.

+0

Sweet Jebus! 감사합니다. 친구에게 56 개의 흔적이 있음을 알려 드리기 전에 답변을 읽어보십시오. 나는 IRC에 있었고 많은 Firefox 탭을 열었습니다. 그리고 당신은 그냥 따라 와서 그것을 볼 수 있습니다, 나는 때때로 당신은 두 번째 눈 쌍이 필요하다고 생각합니다. –

1

그렇게하고 싶다면 이벤트 리스너를 제거하는 것처럼 보이지 않습니다. 또한 목표 변수는 무엇입니까? 그것이 선언 된 곳을 보지 못했습니다. e.currentTarget이나 다른 것을 사용하고 싶습니까?

+0

당신은 정확합니다, 나는 당신과 CookieOfFortune 덕분에 XMLLoader에 대한 이벤트 리스너를 제거하지 않고있었습니다. 이제는 원활하게 작동합니다. –

+0

그래, 그가 게시하는 동안 그는 대답했다! 저보다 빠른 타이핑을위한 CookieOfFortune. (또한 ... 저는 선생님이 아닙니다!) – quoo

+0

인터넷에서 선량한 여성, 분명히 농담. 누가 먼저 여기에 왔는지에 관계없이, 나는 너의 부채에있어. –

1

타임 라인에서 수행중인 작업을 확인하고 stop() 명령을 어딘지 확인하고 이벤트 리스너를 다시 추가하지 마십시오.

타임 라인에 키 프레임을 입력 할 때마다 이벤트 수신기가 추가됩니다. 따라서 다른 프레임으로 이동 한 다음 다시 이벤트 리스너를 추가하는 프레임으로 돌아 오는 것 같습니다.

관련 문제