1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152 |
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;
}
}
}
|