Search code examples
actionscript-3flashflash-cs6

Passing variable value from function in a class in AS3


I'm working with as3 and I don't understand how to pass from a value on a function to a global variable. I have this code (in a .as file):

package {

public class loadInfo {
    import flash.events.*;
    import flash.net.*;

    private var teamA:String;

    public var urlLoader:URLLoader = new URLLoader( );

    public function loadInfo() {
        urlLoader.addEventListener(Event.COMPLETE, handleComplete);
        urlLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
        urlLoader.load(new URLRequest("data.txt" ));
    }

    public function handleComplete( event:Event ):void {
        this.teamA = urlLoader.data.teamA;
    }
    public function getTeamA():String{
        return teamA;
    }
  }

}

What I'm doing with this code is to load several variables which are in a .txt file.

and in the .fla file I have:

import loadInfo;

var dat:loadInfo = new loadInfo();
trace(dat.getTeamA());

but the result is "null". So, I have no clue what to do. Help is appreciated. Thanks.


Solution

  • The problem is that you don't wait for the loader to complete. It takes time to load that txt file and if you call getTeamA immediately, the loader isn't finished. You should do something like this:

    var dat:loadInfo = new loadInfo();
    dat.addEventListener(Event.COMPLETE, onDataLoaded);
    
    function onDataLoaded(e:Event):void {
        trace (dat.getTeamA());
    }
    

    And within loaderInfo:

    public function handleComplete( event:Event ):void {
        this.teamA = urlLoader.data.teamA;
        dispatchEvent(new Event(Event.COMPLETE));
    }
    

    Should work properly. Keep in mind that loaderInfo must extend EventDispatcher (class loaderInfo extends EventDispatcher {)..