root/com/tilemap/TileMap.as

User picture

Author: Ying

Revision: 7 («Previous)


File Size: 4.48 KB

(March 22, 2009 15:43 UTC) About 3 years ago


  

 
Show/hide line numbers
package com.tilemap {
	
   // Needed imports 	
   import flash.display.MovieClip;
   import flash.display.Stage;
   import flash.display.Bitmap;
   import flash.geom.*;
   import flash.display.BitmapData;
   import flash.display.Loader;
   import flash.net.URLRequest;
   import flash.events.*;
   import flash.net.*;
	
   // Class TileMap
   public class TileMap extends MovieClip {
   
	   private var loader:Loader; // The bitmap loader
	   private var xmlLoader:URLLoader;
	   private var mazeData:XML;
	   private var mapXMLData:String;
	   public  var aTileMap:Array=new Array();
	   private var screenBitmapData:BitmapData;
	   private var tilesBitmapData:BitmapData;
	   private var screenBitmap:Bitmap;
	   
	   private var mapRows:int=1; //18
	   private var mapCols:int=1; // 24
	   private var tileSize:int=25;
	   private var tileMapWidth:int=1;
	   
	   private var screenWidth:int;
	   private var screenHeight:int;
	   
	   private var stageRef:Stage;
	   private var bMapLoaded:Boolean;
	   
	   // Constructor
	   public function TileMap()
	   {
		   bMapLoaded = false;
		   
	   }
	   
	   public function CreateMap( stageRef:Stage, tilemappath:String, mapxmldata:String, rownumber:Number, colnumber:Number, tilemapwidth:Number, tilesize:int) 
	   {
		    trace("TileMap: Constructor");
			trace("- Params: " + tilemappath + ", " + mapxmldata);
			
			this.name="nMap";
			
			// Give the map size
			mapRows = rownumber;
			mapCols = colnumber;
			tileMapWidth = tilemapwidth;
			tileSize = tilesize;
			
			screenWidth  = mapCols*tileSize;
			screenHeight = mapRows*tileSize;		
			
			// Grab the xml data path
			mapXMLData = mapxmldata;
			
			this.stageRef = stageRef;
			
			//Load the tile sheet image
			loader = new Loader( );
			loader.contentLoaderInfo.addEventListener(Event.INIT,tilesLoadInit);
			loader.load(new URLRequest(tilemappath)); // "Art/Tilemap.png"		
	   }
	   
	   public function IsReady():Boolean
	   { return bMapLoaded;}
	   
	   
	   public function removeSelf() : void
		{
			trace("TileMap: Destructor"); 
			if (stageRef.contains(screenBitmap)) stageRef.removeChild(screenBitmap);
		}
	   
	   // Loads tilemap bitmap and, for some strange reason, also the MapXML
	   private function tilesLoadInit (e:Event):void 
	   {		
		   tilesBitmapData=Bitmap(loader.content).bitmapData;
		   //load in xml file for map
		   loadMapXML();
	   }
				
		// Nitty- gritty of loading the map xml
		private function loadMapXML():void 
		{
		   xmlLoader=new URLLoader();
		   xmlLoader.addEventListener(Event.COMPLETE, xmlLoadComplete);
		   xmlLoader.load(new URLRequest(mapXMLData)); // "Maps/Test1Map.xml"
		}
		
		
		
	   // As soon as the map event of being complete fires, this baby is called
	   private function xmlLoadComplete(e:Event):void 
	   {
		   mazeData=new XML(xmlLoader.data);
		   //loop through xml and add rows and columns to aTileMap array
		   for (var rowCtr=0;rowCtr<mapRows;rowCtr++)
		   {
				var tempArray:Array=new Array();
				//trace("row=" + rowCtr);
				for (var colCtr=0;colCtr<mapCols;colCtr++) 
				{
				   //trace("col=" + colCtr);
				   //trace(mazeData.tilerow[rowCtr].tilecol[colCtr]);
				   tempArray.push(mazeData.tilerow[rowCtr].tilecol[colCtr]);
				}
				aTileMap.push(tempArray);
			}
					
		
					
		   //using the data in the array add to screenBitmapData
		   screenBitmapData=new BitmapData(screenWidth,screenHeight,false,0x000000);
					
		   //screenBitmapData.copyPixels(tilesBitmapData,new Rectangle(0,0,32,32), new Point(0,0));
		   for (rowCtr=0;rowCtr<mapRows;rowCtr++) 
		   {						
				for (colCtr=0;colCtr<mapCols;colCtr++) 
				{
				   var tileNum:int=int(aTileMap[rowCtr][colCtr]);
				   var destY:int=rowCtr*tileSize;
				   var destX:int=colCtr*tileSize;
				   var sourceX:int=(tileNum % tileMapWidth)*tileSize;
				   var sourceY:int=(int(tileNum/tileMapWidth))*tileSize;
				   var sourceRect:Rectangle=new Rectangle(sourceX,sourceY,tileSize,tileSize);
				   var destPoint:Point=new Point(destX,destY); 
				   screenBitmapData.copyPixels(tilesBitmapData,sourceRect,destPoint);
				}
						
		   }
					
					
		   //display screen by adding screenBitmapData to screenBitmap and add screenBitmap data to displaylist
		   screenBitmap=new Bitmap(screenBitmapData);
		   screenBitmap.name="nScreenMap";		   
		   
		   stageRef.addChildAt(screenBitmap,0);												
		   
		   bMapLoaded = true;
					
	   }
	}
}