I have two classes: Level, which dictates a tile-based level, and MapLoader, which loads a text file on my local machine.
I am calling a load function through Level asking MapLoader to load, but when I try to parse the data, MapLoader isn’t done with the load.
I’ve tried putting the load in a while loop, but it just freezes. Here’s the MapLoader and the function in Level.
MapLoader:
package {
import flash.display.Sprite;
import flash.events.*;
import flash.net.*;
public class MapLoader extends Sprite {
private var source:String;
private var dataFormat:String=URLLoaderDataFormat.TEXT;
private var mapData:String;
public function MapLoader(s:String) {
source = "maps\\"+s;
mapData = "";
var loader:URLLoader = new URLLoader();
loader.dataFormat=dataFormat;
configureListeners(loader);
var request:URLRequest=new URLRequest(source);
try {
loader.load(request);
} catch (error:Error) {
trace("Error loading requested document: " + source);
}
}
private function configureListeners(dispatcher:URLLoader):void {
dispatcher.addEventListener(Event.COMPLETE, completeHandler);
dispatcher.addEventListener(Event.OPEN, openHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}
public function GetMapData():String {
return mapData;
}
private function completeHandler(event:Event):void {
var loader:URLLoader=URLLoader(event.target);
/*
switch (loader.dataFormat) {
case URLLoaderDataFormat.TEXT :
trace("completeHandler (text): " + loader.data);
break;
case URLLoaderDataFormat.BINARY :
trace("completeHandler (binary): " + loader.data);
break;
case URLLoaderDataFormat.VARIABLES :
trace("completeHandler (variables): " + loader.data);
break;
}
//*/
trace("Done loading.");
mapData = loader.data;
}
private function httpStatusHandler(event:Event):void {
trace("httpStatusHandler: " + event);
}
private function ioErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler: " + event);
}
private function openHandler(event:Event):void {
trace("openHandler: " + event);
}
private function progressHandler(event:ProgressEvent):void {
trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
}
private function securityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler: " + event);
}
}
}
Level.LoadMap
public function LoadMap(s:String):void {
var ml:MapLoader=new MapLoader(s);
var rawData:String;
rawData=ml.GetMapData();
LevelData=rawData.split(/[,
]/);
trace(LevelData);
}
Any idea?