Egret社区

egret读取tiledmap数据

2015-12-15 13:25
55517
问题描述:在tiled地图编辑器(版本:版本 v0.14.2-39-g78c273c)制作一个简单的地图。地图如照片所示。

tiled制作地图

tiled制作地图

包含3个图层和1个对象层。对象层包含2个对象。
对象层示意.jpg
在egret(版本2.5.6)中加载上述地图。显示效果如图:
网页效果图.jpg

问题是:无法获取到对象层的对象信息。
相关代码如下:

console.log("11111111111111111");
if(curTmxTileMap!=null)
{
    console.log("2222222222222222222222222222222");
    //add all layers instances
    var layers =curTmxTileMap.getLayers();
    var layerLen=layers.length;
    console.log("layers count:"+layerLen);
    console.log(layers);

    for (var i = 0; i < layers.length; i++) {     
        var layer:tiled.TMXLayer = layers[i];  
        console.log(layers[i]._name+"  "+layers[i]);
    }
    //add all Object instances
    var objects = curTmxTileMap.getObjects();//返回 TMXObjectGroup 的集合
    console.log("objects count:"+objects.length);
    console.log(objects);
    for (var i = 0; i < objects.length; i++)
    {
        var objectt:tiled.TMXObjectGroup = objects[i];
        console.log("cur TMXObjectGroup: name "+objectt.name);
        console.log(objectt);
        if(objectt!=null)
        {
            var curOGChild:number=objectt.getObjectCount();           
            console.log("curOG childCount:"+curOGChild);
            for (var j = 0; j < curOGChild; j++)
            {
              var curTMXObj:tiled.TMXObject=objectt.getObjectByIndex(j);
            if(curTMXObj!=null)
            {
                console.log("cur TMXObj: name "+curTMXObj.name+" x:"+curTMXObj.x+" y:"+curTMXObj.y);
               console.log(curTMXObj);
            }
            }
        }
    }
}
调试部分输出信息如下:
调试输出信息.jpg

测试文件如下:

testTiled.zip (102.91 KB, 下载次数: 70)
分享到 :
2 人收藏

7 个回复

倒序浏览
Adair  初窥堂奥 | 2015-12-16 13:53:39
//这个里面存放的对象信息
        var arr: any = tmxTileMap.getObjects();
        //得到当前层级对象info
        var objData: any = arr[0]._childrens[0];
        //得到当前对象
        var currentObj: egret.DisplayObject = objData.attributes
        currentObj.x = 800;
        //打印对象属性
        for(var key in currentObj){
            console.log(key + ":" + currentObj[key]);
        }
cainiao  登堂入室 | 2016-1-7 00:07:40
非常感谢 Adair 的回复。

追加提问:一般游戏地图比较大,而在手机上加载游戏后,往往手机屏幕只显示了一部分的地图。
例如游戏使用的TiledMap地图大小为 200*200 范围,而当前手机屏幕只显示了(0,0)到(50,50)的范围,玩家角色位于屏幕中间,我想要实现玩家角色移动时,动态改变加载的地图的区域。应该调用 tmxTileMap 的哪个方法呢?
谢谢!
cainiao  登堂入室 | 2016-1-12 15:11:30
Adair 发表于 2015-12-16 13:53
//这个里面存放的对象信息
        var arr: any = tmxTileMap.getObjects();
        //得到当前层级对象i ...

你好 麻烦再指点下这个问题哈
关于tiledmap加载区域动态改变的问题。
地图比较大,手机当前屏幕只显示了一部分地图区域。当角色移动时,跟随玩家的移动加载新的区域。
Adair  初窥堂奥 | 2016-1-14 09:46:39
cainiao 发表于 2016-1-7 00:07
非常感谢 Adair 的回复。

追加提问:一般游戏地图比较大,而在手机上加载游戏后,往往手机屏幕只显示了一 ...

这个动态加载地图的话  我觉着应该是比较困难的吧  你还得知道每个title 相关的那些属性 而且还得知道位置  这个运行起来计算量就大了  如果只是  一张大地图要随人物移动多少  显示地图相关区域的话 可以用rectangle做一个虚拟的区域  当人物移动到这个区域边界的时候  如果还要移动的时候  就让地图让相反的方向移动 人物不动  就好了  这个忘了是哪位版主 有做过这样的一个例子  可以找找看
Yngluoo  登堂入室 | 2017-1-17 16:18:46
Adair 发表于 2015-12-16 13:53
//这个里面存放的对象信息
        var arr: any = tmxTileMap.getObjects();
        //得到当前层级对象i ...

大侠,现在_childrens这个为私有属性,如果要实现这个的话,是不是要修改库函数私有改成公有?但是每次构建egret会自动改回来,那么该怎么办呢?
LSH825  登堂入室 | 2019-5-14 13:59:35
同问 怎么取
fionwang  初学乍练 | 2019-11-7 16:36:35
tmxTileMap.getObjects()取不出来值,官方不解决吗
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

cainiao

登堂入室

积分: 19 帖子: 18 精华: 0

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部