JSON
private function _saveData(event:Event):void
{
var newFile:File = event.target as File;
var str:String = DrawMapGrid.getInstance().generateMapArray();
var stream:FileStream = new FileStream();
//write模式存在就替换
stream.open(newFile, FileMode.WRITE);
stream.writeUTFBytes(str);
stream.close();
}
JSON
public function generateMapArray():String{
var mapPath:String = "";
mapPath += '{';
mapPath += '"'+'mapW'+'":'+Data.mapDataVO.mapW+",";
mapPath += '"'+'mapH'+'":'+Data.mapDataVO.mapH+",";
mapPath += '"'+'mapGridW'+'":'+Data.mapDataVO.mapGridW+",";
mapPath += '"'+'mapGridH'+'":'+Data.mapDataVO.mapGridH+",";
mapPath += '"'+'divideBlockW'+'":'+Data.divideBlockW+",";
mapPath += '"'+'divideBlockH'+'":'+Data.divideBlockH+",";
mapPath += '"'+'mapFlagArr'+'":[';
for(var i:int=0;i<mapTileArray.height;i++){
for(var j:int=0;j<mapTileArray.width;j++){
//trace(j+":"+i+" -- "+MapTile(mapTileArray.get(j,i)).tileState);
var tileState:int = MapTileVO(mapTileArray.get(j,i)).tileState;
mapPath += tileState + ',';
}
}
mapPath = mapPath.substring(0,mapPath.length-1);
mapPath += ']}';
return mapPath;
}
=============================================================================
/**
* 地图文件另存为
*/
public function onSaveAs(e:*,data:String=''):void
{
// 若e含有target对象,则以target为file对象(另存为),否则直接将e取为file对象(保存)
var file:File = e.hasOwnProperty('target') ? e.target as File : e as File;
// 通过二进制数据进行压缩
var ba:ByteArray = new ByteArray();
ba.writeUTFBytes(data=='' ? _root.Shower.Configer : data);
XML
/**
* 生成当前地图的配置文件
*/
public function get Configer():String
{
var result:String = "<map>\n";
result+="<id>"+(_scene==null ? D5Power.mapid : _scene.Map.mapid)+"</id>\n"; // 地图ID
result+="<hasTile>"+D5Power.hasTile+"</hasTile>\n"; // 是否采用区块构图
result+="<loopbg>"+(_scene==null ? '' : _scene.Map.loopBG)+"</loopbg>\n";
result+="<tileFormat>"+(_scene==null ? '' : _scene.Map.tileFormat)+"</tileFormat>\n";
result+="<tileX>"+Global.TILE_SIZE.x+"</tileX>\n";
result+="<tileY>"+Global.TILE_SIZE.y+"</tileY>\n";
result+="<mapW>"+Global.MAPSIZE.x+"</mapW>\n";
result+="<mapH>"+Global.MAPSIZE.y+"</mapH>\n";
result+="<music>"+MusicPath+"</music>";
result+="<script>"+ScriptPath+"</script>";
var obj:Array = _scene==null ? new Array() : _scene.getAllObjects();
var res_npc:String = "\n\n<npc>\n";
var res_bud:String = "\n\n<build>\n";
var res_road:String = "\n\n<roadpoint>\n";
for each(var o:GameObject in obj)
{
switch(o.objectName)
{
case 'NCharacterObject':
var nco:NCharacterObject_MaEd = o as NCharacterObject_MaEd;
res_npc+="<obj>\n";
res_npc+="<res>"+nco.graphicsRes.resName+"</res>\n";
res_npc+="<posx>"+nco.PosX+"</posx>\n";
res_npc+="<posy>"+nco.PosY+"</posy>\n";
res_npc+="<name>"+nco.username+"</name>\n";
res_npc+="<lua>"+nco.lua_filename+"</lua>\n";
res_npc+="<uid>"+nco.uid+"</uid>\n";
res_npc+="</obj>\n";
break;
case 'BuildingObject':
var nbo:BuildingObject = o as BuildingObject;
res_bud+="<obj>\n";
res_bud+="<res>"+nbo.graphicsRes.resName+"</res>\n";
res_bud+="<canBeAtk>"+nbo.canBeAtk+"</canBeAtk>\n";
res_bud+="<zorder>"+nbo.zOrderF+"</zorder>\n";
res_bud+="<posx>"+nbo.PosX+"</posx>\n";
res_bud+="<posy>"+nbo.PosY+"</posy>\n";
res_bud+="<centerx>"+nbo.zero.x+"</centerx>\n";
res_bud+="<centery>"+nbo.zero.y+"</centery>\n";
res_bud+="</obj>\n";
break;
case 'RoadPoint':
var road:RoadPoint = o as RoadPoint;
res_road+="<obj>\n";
res_road+="<posx>"+road.PosX+"</posx>\n";
res_road+="<posy>"+road.PosY+"</posy>\n";
res_road+="<toMap>"+road.toMap+"</toMap>\n";
res_road+="<toX>"+road.toX+"</toX>\n";
res_road+="<toY>"+road.toY+"</toY>\n";
res_road+="</obj>\n";
break;
}
}
res_npc+="</npc>\n";
res_bud+="</build>\n";
res_road+="</roadpoint>\n";
result+=res_npc;
result+=res_bud;
result+=res_road;
result+="</map>";
return result;
}
========================================
/**
var txt:TextField = new TextField();
txt.blendMode = BlendMode.LAYER;
txt.cacheAsBitmap = true;
txt.selectable = txt.border = false;
txt.defaultTextFormat = new TextFormat(null,10,0,false,false,false,null,null,"center");
txt.text = x + "," + y;
txt.width = 100;
txt.height = 25;
getRealPosition(x, y, temp);
//temp.y -= GlobalModel.PIECE_HEIGHT;
temp.x -= GlobalModel.PIECE_WIDTH;
txt.x = temp.x;
txt.y = temp.y;
this.addChild(txt);
*/
======================================
/**
* 保存mpt地图数据文件
*/
public function saveMapData(f:File):void{
var file:File = f;
var ba:ByteArray=new ByteArray(); //guan:用byte的方法进行写入
ba.writeShort(GlobalModel.PIECE_WIDTH);
ba.writeShort(GlobalModel.PIECE_HEIGHT); //guan:以上是格子的 宽,高
ba.writeShort(comVirtualGrid.gridLayer.col);
ba.writeShort(comVirtualGrid.gridLayer.col); //guan:格子层 的 col = 73
ba.writeShort(comVirtualGrid.grid_w);
ba.writeShort(comVirtualGrid.grid_h); //图片的 宽 高
ba.writeShort(comVirtualGrid.gridLayer.iConnectedPointY); //iConnectedPointY
for(var i:int=0;i<10;i++)
ba.writeInt(0); //guan:写入 10 个0
for(var y:int=0;y<dataArray.length;y++){ //guan:不可编辑区域 写入 1 ,可编辑区域 写入的还是原来的值
for(var x:int=0;x<dataArray[y].length;x++){ //dataArray 记录是否可编辑 信息
if(dataArray[y][x]==9){
ba.writeByte(1);
trace("这个是不可编辑区域,将它写进数组里的值为:1 in method SaveHandle from ComVirtualGrid");
}
else{
ba.writeByte(dataArray[y][x]);
trace(y+","+x+"的值为:"+dataArray[y][x]); //可编辑区域
}
}
}
ba.compress(); //采用默认的zlib压缩算法压缩文件。
//var fileStream:FileStream = new FileStream();
// fileStream.open(file,FileMode.WRITE);
// fileStream.writeBytes(ba);
//file.browseForSave("保存地图数据");
var fileStream:FileStream = new FileStream();
fileStream.open(file,FileMode.WRITE); //guan: 我的理解:文件流 写模式
fileStream.writeBytes(ba); //guan:写入字节
fileStream.close(); //guan:文件流关闭
onSaveServerMapData(file);
}