如题,使用creater创建一个tilemap节点,把导入的tmx文件绑定到节点对应的tilemap组件,但是在js中获取tilemap的对象层,获取不到。creater的层级管理器也没显示对象层,只有背景层?
获取对象层的接口为 getObjectGroup(groupName)。
目前 TiledMap 暂时不支持对象层的显示,会在后续版本进行改进。谢谢反馈!
非常感谢回复。我是用的那个方法,可是没成功
map :{
default:null,
type:cc.TiledMap
}
},
// use this for initialization
onLoad: function () {
var objectLayer = this.map.getObjectGroup("o");
var array = objectLayer.getObjects();
cc.log("this is:"+objectLayer.getObject("b").name);
this.title.string =objectLayer.getObject("b").name;
}
报如下警告:TypeError: objectLayer is null
我刚刚试了一下,发现问题的原因在于:名称为 b 的这个 object 有一个自定义的属性 name,值为 windysea。在解析地图数据时,这个自定义属性覆盖了 object 原有的 name 属性 b。如图:

把这个自定义的 name 属性删除之后就可以正常获取对象了。
我这里删除了那个属性,还是不行,控制台报错如图。
js内容如下:

关键错误好像是:
Simulator : js_cocos2dx_TMXTiledMap_initWithTMXFile : Invalid Native Object
Simulator : C:/Users/whtme/AppData/Local/CocosCreator/app-1.0.3/resources/app.asar.unpacked/utils/simulator/win32//src/jsb_polyfill.js:20415:Error: js_cocos2dx_TMXTiledMap_initWithTMXFile : Invalid Native Object
这是怎么回事?
虽然看不到,但是可以取得到



请问你的 Creator 是哪个版本呢?是否有修改过 native 引擎?
我刚找到原因。 是因为 tilemap的调用不用放在onload 函数内。估计onload的时候,组件的属性还没绑定吧。所以造成无法引用。
properties: {
title:{
default:null,
type:cc.Label
},
map:{
default:null,
type:cc.TiledMap
}
},
// use this for initialization
onLoad: function () {
},
onClick : function(){
var objectLayer = this.map.getObjectGroup("o");
var array = objectLayer.getObjects();
cc.log("this is:"+objectLayer.getObject("b").name);
this.title.string =objectLayer.getObject("b").name;
}
定义了一个按钮,点击按钮执行onclick事件。发现可以引用tilemap了。谢谢您的回复。
你用的 Creator 是 1.0 版本?在 1.0 版本中 tilemap 一定要在 mapLoaded 回调之后才能正常使用。
在 1.1 版本中 TileMap 的加载方式进行了调整,是可以在 onLoad 中使用的。
哦。我是1.0.3版本吧。1.1版本在哪里?没能提示我更新版本啊:),我刚找了下,creater没有update的菜单啊。
http://forum.cocos.com/t/cocos-creator-1-1-0-beta-5-27-rc1/36633
这是 1.1 内测版发布的帖子,可以关注一下。
1.1 正式版也快要发布了。敬请期待!
好。期待ing.多谢。
