Cocos-js 3.10和cocostudio的问题(已解决)

cocos-js版本为3.10
cocostudio版本也是3.10
使用cocos-js+ccs的方式开发,在WEB上可以运行,
cocos run -p web 完全正常
但是
cocos compile -p android
出来以后发现 ccs 里面的有些对象取不到~!
通过ccui.help.seekByName的方式取的
但是所有的对象都可以显示出来
读取的方式是json。
是哪里不对啊?请解

首先,web跟原生下表现有差异是很正常的

有些对象取不到,是指哪些对象?如果是sprite那些非ccs的控件,得用getChildBy…来获取。不知道你控件的层级关系和具体代码无法判断到底什么情况。我一直都是用js+studio做的native开发,试过很多版本,不记得遇到过取不到控件的情况

getchildBy?
从那个返回的node上getChildBy?
你从来没有用过seekByName吗?
seekByName在web上能用,但到JSB里面就出问题了~~
你从来没用过seekByName吗?

控件是有很多层的,都是从root里面去取,没有从他的parent去取。
取的控件有sprite和txt这些东西,奇怪的是有些txt能取到,有些又不能取到~~~

ccs里的控件可以用seekWidgetBy…去取,但是sprite之类的并不属于widget(虽然可以在ccs里添加),只能用getChildBy…去取。

另外,getChild不能跨级查找,也就是说,只能通过这个控件的直属父控件查询直属该控件。seekWidget无此限制(但对sprite来说,只能用getChild,要不你就改用imageView)

不要问我为啥seek在web上能用,自从我发现web跟native表现不一致后我就直接放弃web了

:grinning:
我试试你提供的这个方法,如果能在WEB和NATIVE上共用,我就使用这种方法了,不然要编2套程序~
多谢了~!

你的说法是正确的,seekWidgetByName在HTML中确实可以访问所有对象,包括非widget的
但是在JSB中就杯具了,它只访问widget的对象,非widget对象不访问,因为就会出现我所出现的这个问题!
解决的办法有几个
1 把所有的非WIDGET对象换成WIDGET的
2 使用你所使用的办法,虽然会麻烦一点,但是它管用
3 使用这哥们的办法
http://blog.csdn.net/demon_xyz/article/details/47616703

其实你可以自己封装一个比如叫seekChildByName,让它可以支持在子节点中查询不到的时候,将子节点作为父节点对其递归调用getChildByName……

function seekChildByName(root,name){
   var _target=root.getChildByName(name);
   if(_target!=null){
	   return _target;
   }
   var _children=root.getChildren();
   for(var i=0;i<_children.length;i++){
	   var _child=_children[i];
	   _target=seekChildByName(_child,name);
	   if(_target!=null){
		   return _target;
	   }
   }
}
1赞

32个赞~!这个办法比那哥们的来得安全~~~:)
而且也兼容