0

나는 블리 팅 엔진을 만들려고 노력하고 있으며,이 부분은 정말 힘든 시간을줍니다. 나는 텍스쳐 패커가 뱉어 낸 파일로부터 xml 파싱을 모두하기위한 외부 클래스를 만들려고 노력하고있다. 그러나AS3 -로드 된 데이터의 변수 값을 반환하는 함수의 문제

var _xmlParser:XmlParserBlit = new XmlParserBlit(); 
_blitDataAry = _xmlParser.getAryFromBlitXmlData("blit_test_4.xml"); 

: 난 그냥, 이런 식으로 뭔가를 인스턴스화하고 그것의 직업 수행을위한 하나 개의 함수를 호출 할 수 있도록 기대했다

XmlParserBlit.as

라는 내 유틸리티 패키지에 클래스를 만들어 그렇게 쉽지는 않을 것 같습니다. XmlParserBlit 클래스의 내부 함수는로드가 완료 될 때 발생하는 함수를 트리거하는 이벤트 수신기를가집니다. 플래시는 함수를 통해 계속 진행되며 추적 ("Finished Array :"+ _xmlDataAry); 그냥 빈 배열을 반환합니다. 완전한 청취자가 끝나기를 기다릴 수있는 방법이 있습니까? 아니면 getAryFromBlitXmlData에서 onXmlLoaded로 값을 반환 할 책임을 되돌릴 수 있습니까?

나는 정말로 혼란스럽고,이 문제를 이길 방법을 배우는 것은 비슷한 문제를 해결하는 방법에 대한 나의 마음을 열어 줄 것이다. 감사.

public function getAryFromBlitXmlData(xmlPath:String):Array 
    { 
      _xmlDataAry = [] 

      _xmlPath = xmlPath; 

      _testXml = new XML(); 
      _testXmlRequest = new URLRequest(_xmlPath); 
      _testXmlLoader = new URLLoader(); 

      _testXmlLoader.addEventListener(Event.COMPLETE, onXmlLoaded); 
      _testXmlLoader.load(_testXmlRequest); 

      trace("Finished Array: " + _xmlDataAry); 

      return _xmlDataAry; 

    } 

    protected function onXmlLoaded(event:Event):void 
    { 

     _loadedXML = new XML(event.target.data); 

     var theSprites:XMLList = _loadedXML..sprite 

      for each (var _rectSprite:XML in theSprites) 
      { 

          //-------------------------------------- 
          // do some string manipulations here 
          //--------------------------------------       
      } 

     var _rectangle:Rectangle = new Rectangle(_xValue, _yValue, _widthValue, _heightValue); 

     var miniAry:Array = [_rectangle, _xOffsetValue, _yOffsetValue] 

     _xmlDataAry.push(miniAry); 


       //* want to return _xmlDataAry to the getAryFromBlitXmlData function 

      } 


     } 

답변

0

onXmlLoaded로드 기능이 비동기식으로 완료 될 때까지 트리거되지 않습니다. 가장 좋은 방법은 getAryFromBlitXmlData는 값을 반환하지 확인하고

+0

onXmlLoaded 당신이 네트워크를 통해에서 XML을 잡아 있습니까 당신의 _xmlDataArray 내부를 처리하는 것? 그렇지 않다면 이벤트를 사용하여 데이터를로드하고 싶지 않을 것입니다. 더 비슷한 것을 제안 할 것입니다 : 'protected function loadXML (filename : String) : Array { _loadedXML = new XML (filename) ; // 작업 수행 return _xmlDataArray; }' – SeiferTim

+0

이것은 결국 네트워크를 통과하기위한 것입니다. 그것은 온라인 게임에있을 것이고 xml은 respository/webserver에서로드됩니다. 그게 왜 차이가 나는지 나는 알지 못합니다. XML을 사용할 때로드가 완료되거나 오류가 발생할 때까지 기다릴 필요가 없습니까? – Jim

+0

예, 처리하기 전에 XML이로드되었는지 확인해야하지만 코드에서는 그렇지 않습니다. – SeiferTim