地图数据说明

前端之家收集整理的这篇文章主要介绍了地图数据说明前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

地图文件下载 

:http://www.huanhuan18.com/myWeb/soft/YFEditor.air 

  或者 : http://www.huanhuan18.com/myWeb/soft/YFEditor/

 exe形式 ::http://www.huanhuan18.com/myWeb/soft/YFEditor.exe


使用注意 : 假如 需要使用低像素图片 需要自己手动 去点击 低像素按钮 来生成低像素地图    地图切片也是 一样 需要自己主动去触发  !这两个功能处理时间比较长  使用时请耐心等待

数据文件说明: 网络地址: 

http://www.huanhuan18.com/myWeb/soft/map1.xml



<?xml version="1.0" encoding="utf-8"?>

<YFMapEditor>
  <map mapName="map1" url="images/bgMap/singleMap/map1.jpg" tileWidth="60" tileHeight="30" caculateWidth="3660" caculateHeight="1680" mapWidth="3660" mapHeight="1658" loadType="μ¥???t??" beginTileX="-1" beginTileY="-1" endTileX="60" endTileY="111" roadType="1" blockType="0" alphaRoadType="2" skipTypeDescription="大于等于3的节点类型">
    <floor>0,3,2,0</floor>
    <skipMaps/>
    <buildings>
      <building url="" buildX="330" buildY="330" imageX="330" imageY="15" roatationX="0" roatationY="0" roatationZ="0" deepIndex="0">
        <corner>10,10,100,100</corner>
      </building>
      <building url="" buildX="0" buildY="0" imageX="0" imageY="90" roatationX="0" roatationY="0" roatationZ="0" deepIndex="1">
        <corner>10,100</corner>
      </building>
      <building url="images/trees/2.png" buildX="210" buildY="195" imageX="210" imageY="195" roatationX="0" roatationY="0" roatationZ="0" deepIndex="2">
        <block>5,6,4,7,5,1,8,9,11,13,15,12,17,14,19,18,20,21,23,24,22,</block>
        <corner>182,464,41,182,370,356,424</corner>
      </building>
    </buildings>
  </map>

</YFMapEditor>













相关说明:




数据说明:

 mapName 是 地图的名称
url是地图地址
mapWidth mapHeight   是这个地图的实际宽高  
caculateWidth caculateHeight是这个地图的 计算宽高  是我们在数据处理中要用到的宽高
beginTileX beginTileY  第一个节点位置  

roadType=1 表示可走  blockType表示不可走  alphaRoadType=2表示消隐点.也就是人物在该点时需要半透明化
值大于等3的点表示地图跳转点用来跳转到其他地图中




 skipMap节点

    secondInfo用来标识在同一地域间的跳转 假如两张地图之间进行跳转,则不需要考虑此属性
假如 在一张地图上进行传送跳转到该地图的另一传送点 则需要 此属性

type 值是指的是该类型  
里面<skipMap> 0,11</skipMap>  的值指的是这点存在的位置  用的是tile坐标



building  节点:
url指的是 图片地址  buildX buildY指的是 该建筑的位置(flash坐标)    imageX imageY(flash坐标) 是图片的位置,这也是我在写程序加载图片后所需要放置的位置     corner里面的值指的是该建筑的四个控制点的位置(tile坐标),这个位置是相对的 相对 buildX  buildY的值 (计算时需要将cornenr内部的值转换为flash坐标 在与buildX  buildY相加得到全局的控制点flash坐标)

block 里面的值保存的是不可走的局部位置  得到全局位置 也是要借助 buildX buildY值







 必备工具类:

package  utils.games.utils {     /**      * ...      * @author dreamnight   http://huanhuan18.com/blog   http://blog.csdn.net/hu36978      *      */     public class MapUtil     {             import flash.geom.Point;                          import utils.games.display.GameObject;         public function MapUtil()         {                      }                                    /*          *在 getTilePoint函数 的基础上增加了 对gridlayer坐标位置的判断定位          *          * */                  public static function getTilePoint2(tileWidth:Number,tileHeight:Number,px:Number,py:Number,gridLayerX:Number=0,gridlayerY:Number=0):Point {                          //根据 gridlayer坐标 来算出像素相对坐标             var realX:Number = px - gridLayerX;             var realY:Number = py - gridlayerY;                          return     MapUtil.getTilePoint(tileWidth,tileHeight,realX,realY);                          }                                                                                                            /**          *          *   //这里的 px 是相对于原点的像素坐标   这里的网格的原点坐标在(0,0)也就是gridLayer中的grid坐标在原点并且gridlayer的坐标也在原点 在以后的GridLayer中我只控制GridLayer所以这个方法实用性 是当Gridlayer的坐标在原点时成立          *          * */         public static function getTilePoint(tileWidth:Number,py:Number):Point         {             /**              * 网格的x坐标              * */             var xtile:int = 0;                 /**              * 网格的y坐标                  * */             var ytile:int = 0;                      var cx:int,cy:int;             /**              * 计算出当前X所在的以tileWidth为宽的矩形的中心的X坐标                  * */             cx = int(px / tileWidth) * tileWidth + tileWidth/2;                 /**              * 计算出当前Y所在的以tileHeight为高的矩形的中心的Y坐标              * */             cy = int(py / tileHeight) * tileHeight + tileHeight / 2;                          //四个直线方程             var line1:Number = py + (px - cx) *tileHeight  / tileWidth - cy + tileHeight * 0.5; //  满足 >0条件             var line2:Number = py + (cx - px) *tileHeight  / tileWidth - cy + tileHeight * 0.5;  //    >0             var line3:Number = py + (cx - px) * tileHeight / tileWidth - cy - tileHeight * 0.5;//   <0             var line4:Number = py + (px - cx) * tileHeight / tileWidth - cy - tileHeight * 0.5;//  <0                              //当点在矩形内 也就是 y 为偶数的 tile               if ((line1>=0)&&(line2>=0)&&(line3<=0)&&(line4<=0)) {                                xtile = int(px / tileWidth);                ytile = int(py / tileHeight) * 2;                                                                          }                                         //、当在棱形外                else {                                        //对X进行定位  当在左半边时                                        if ((px <= cx + tileWidth * 0.5) && (cx <= px)) {                                                xtile = int(px / tileWidth);                                                                                               }                        else {                            //右半边                                                         xtile = int(px / tileWidth) - 1;                                                                                                                                                                    }                                          //对 y  进行定位  当在上半部分时                     if ((cy <= py) && (py <= cy + tileHeight * 0.5)) {                                                  ytile = int(py / tileHeight) * 2 + 1;                                                                       }else {                                                          ytile = (int(py / tileHeight) - 1) * 2 +1;                                                                                                            }                                                 }                                  return new Point(xtile,ytile);                                                                                }                                             /*          * 得到左上角的flash坐标 也就是注册点          * */         public  static function getLeftTopPointByTile(tileWidth:int,tileHeight:int,tileX:int,tileY:int):Point {                                   var point:Point = MapUtil.getTileCenterByTilePoint(tileWidth,tileX,tileY);                  var px:Number = point.x - tileWidth * 0.5;         var py:Number = point.y - tileHeight * 0.5;         return new Point(px,py);                          }                                                    public static function getLefTopPointByPixelPoint(tileW:Number,tileH:Number,py:Number):Point {                 var point:Point = MapUtil.getTileCenterByPixelPoint(tileW,tileH,px,py);                                      var myX:Number = point.x - tileW * 0.5;                     var myY:Number = point.y - tileH * 0.5;                     return new Point(myX,myY);                                                   }                                             //根据 tile坐标得到 tile的中心flash坐标         public static function getTileCenterByTilePoint(tileW:Number,tx:int,ty:int):Point {                          var px:Number;             var py:Number;             py = 0.5 * tileH * ty + 0.5 * tileH;             //当 ty为偶数             if (ty % 2 == 0) {                 px = tx * tileW + 0.5 * tileW;                                  }                 else {                                          px=tx * tileW +  tileW;                                                               }                                       return new Point(px,py);             }                                            //根据像素坐标<flash实际坐标> 得到 tile中心坐标                          public static function getTileCenterByPixelPoint(tileW:Number,py:Number):Point {                                  var point:Point = MapUtil.getTilePoint(tileW,py);                                  return  MapUtil.getTileCenterByTilePoint(tileW,point.x,point.y);                                                                    }          /*                // cols是含有的列数  索引 是从0开始                 public static function getIndexByTilePoint(tileX:int,tileY:int,cols:int):int {                                          var index:int=tileY*cols+tileX                                          return index;                                          }*/                                  /*    public  static function getTilePointByIndex(index:int,columns:int):Point {                                                  var tileY:int = index/ columns;                         var tileX:int = index % columns ;                                                                           return new Point(tileX,tileY);                                                                                                    }*/                                                                   /**                          * 根据  tileX tileY来得到相应位置的 点 假如不存在的话就会返回null                          *                          *                          * @param    array  总点数组 长度 为 (endTileX-beginTileX+1)*(endTileY-beginTileY+1)                          * @param    tileX                          * @param    tileY                          */                         public static function getArrayPointByTilePoint(array:Array,endTileX:int,endTleY:int,beginTileX:int=-1,beginTileY:int=-1):Point {                                                          //var column:int = endTileX - beginTileX + 1;                         //    var row:int = endTleY - beginTileY + 1;                                                                                                                    var index:int = MapUtil.getTileIndex(tileX,tileY,endTileX,endTleY,beginTileX,beginTileY);                             var point:Point = array[index];                             return point;                                                                                       }                                                                       /**                          * 根据  px py来得到相应位置的 点 假如不存在的话就会返回null                          *                          *                          * @param    array  总点数组 长度 为 (endTileX-beginTileX+1)*(endTileY-beginTileY+1)                          * @param    px  flash坐标                          * @param    py                          */                             public static function getArrayPointByFlashPoint(tileW:int,tileH:int,array:Array,px:int,py:int,beginTileX:int = -1,beginTileY:int = -1):Point {                                 var tilePoint:Point = MapUtil.getTilePoint(tileW,py);                                                                  return MapUtil.getArrayPointByTilePoint(array,tilePoint.x,tilePoint.y,beginTileY);                                                                                                   }                                                                           /**                                  * 根据tileX tileY 得到在总数组中的索引                                  * @param    tileX                                  * @param    tileY                                  * @param    endTileX                                  * @param    endTleY                                  * @param    beginTileX                                  * @param    beginTileY                                  * @return                                  */                                 public static function getTileIndex(tileX:int,beginTileY:int=-1):int {                                                                          var column:int = endTileX - beginTileX + 1;                                     var index:int = tileX-beginTileX + (tileY-beginTileY) * column;                                                                          return index;                                                                                                                                                    }                                                                                                                                                                                                                                                                                                                                                                                                                                                       //tileX tileY 的本地与全局的转化                                  /*                  * 本地tile在Building的坐标 转化为在Buildding父容器中的坐标                  *                  *                  * 注意 Buildding已经添加进全局做标中                            也就是说   转化后的坐标 是 和building 的坐标  在同一坐标系中                                                  @param  buildingTilePoint 该值是在buiding 中的坐标值                         @param  参照对象     也就是  buildingTilePoint所属坐标系                                                  最终返回的坐标是  和 buiding 在同一坐标系                  *                  * */         /*        public static function localToGlobalTile(buildingTilePoint:Point,buiding:GameObject):Point {                                          var buildingPoint:Point = buiding.getTilePosition();                     var gx:int = buildingTilePoint.x + buildingPoint.x;                     var gy:int = buildingTilePoint.y + buildingPoint.y;                                          return new Point(gx,gy);                                          }*/                                                           /*                  *                  *  全局tile坐标 转化为在Buildding中的坐标                  * 注意 Buildding已经添加进全局做标中                                      @globalPoint  和buiding 的坐标   是在同一坐标系中                 @buiding  参照对象                                  最终返回的是globalPoint在buiding坐标系中的坐标                                   * */                              /*        public  static function globalToLocalTile(globalPoint:Point,buiding:GameObject):Point {                                                               var buildingPoint:Point = buiding.getTilePosition();                     var gx:int = globalPoint.x - buildingPoint.x;                     var gy:int = globalPoint.y - buildingPoint.y;                                          return new Point(gx,gy);                                          }*/                                                                                                                                                    /**                      * 将数据拆成  Point对象 比如                      * @param    str  str的形式是   1,4 这样的形式                         * @return                      */                                      public static function splitDataToPointArr(str:String):Vector.<Point> {                         /**                          * str字符串个数必须是偶数                          */                                                  var arr:Array = str.split(",");                         if (arr.length % 2 != 0) {                         //throw  new Error("MapUtil ::数据有误");                         return new Vector.<Point>();                         //return null;                         }                         var len:int = arr.length;                         var i:int = 0;                         var point:Point;                         var vecPoint:Vector.<Point> = new Vector.<Point>();                         while (i != len ) {                             point = new Point();                             point.x = arr[i];                             point.y =arr[i + 1];                             vecPoint.push(point);                             i = i + 2;                             }                                                                           return vecPoint;                         }                                                                                                                                                                                                                                                                                                                     ///end class              } }

猜你在找的Flash相关文章