注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

眼睛想旅行

技术就是我的生命与信仰!

 
 
 

日志

 
 
关于我

精通C,C++,python,Erlang。并熟悉各种其他编程语言,用cocos2dx游戏引擎作过几个项目。会MySQL增删改查,了解OpenGL渲染原理。懂单片机,能设计数字电路系统,会画电路图和设计电路板。喜欢了解最新前沿技术,并持续关注和学习新技术。

网易考拉推荐

关于cocos Studio for mac中ListView加载  

2014-09-08 22:20:26|  分类: cocos2d |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
今天试了一下cocos Studio for mac版本的编辑器中的ListView。但发现之前在windows上可以使用的方法在使用这个mac版本的cocos Studio之后不能加载,经过这一下午的研究,发现主要问题是for mac版本编辑器的根视图和for windowns的根视图不一样,一个是Node对象,一个是Layout对象。下边只说这个for mac版本中的问题。
1.加载使用UI编辑器编辑好的UI,我使用的是cocos2d-x 3.2版本。for mac是使用的1.0.0版本的。
编辑好之后,导出,在Export文件夹下有你编辑的UI项目,在那里可以找到.json的文件
关于cocos Studio for mac中ListView加载 - ♂苹果 - 眼睛想旅行
这几个json就是你要在cocos2d-x中加载的资源。
实际上,for mac版本的cocos studio编辑器的根视图是Node,见下图。这个和windows系统上是不一样的。
关于cocos Studio for mac中ListView加载 - ♂苹果 - 眼睛想旅行
单单只是这点区别,就难到了很多同学。也是因为这一点不一样,所以使用的加载方法也不一样。
windows下的编辑器使用下边的方法加载UI资源:(因为我的xcode文字背景色设置是黑色,所以下边的颜色可以看起来不清楚,大家讲究着看吧。)

auto myLayout = dynamic_cast<Layout*>(cocostudio::GUIReader::getInstance()->widgetFromJsonFile("CJDHMainUI_1/CJDHMainUI_1.json"));

    auto gamestartBtn = dynamic_cast<Button*>(Helper::seekWidgetByName((Widget*)rootNode,"gameStart_Button"));

而在mac系统下的cocos studio使用下边的加载方法加载资源:

Node* rootNode =cocostudio::timeline::NodeReader::getInstance()->createNode("CJDHMainUI/CJDHGameUI.json");

    this->addChild(rootNode,0);

    

    auto homeBtn = dynamic_cast<Button*>(rootNode->getChildByName("Button_home"));

    homeBtn->addTouchEventListener(CC_CALLBACK_2(GameSelectLayer::touchEvent, this));

这里很明显可以看出来,一个是Layout对象,一个是Node对象。

     在使用ListView时也有一些不一样。因为ListView只能添加Layout对象,不能添加Node的非Widget对象。所以,使用mac下的编辑器的时候,一定要从Node这个对象下边取出Layout对象加进ListView才行。今天研究半天了,总算是把这个搞明白了。

比如,我在使用一个新的画布编辑了一个ListView的Cell子项,当你想使用Widget的clone()时发现会报错。一直没有搞懂,直到最后豁然开朗了。请看下边加载的方法。

ListView* lv = dynamic_cast<ListView*>(rootNode->getChildByName("ListView_main"));

    lv->setDirection(ui::ScrollView::Direction::VERTICAL);

    lv->setBounceEnabled(true);


//这个方法得到的是Node并不是Layout所以不能使用clone.

    Node* wid = cocostudio::timeline::NodeReader::getInstance()->createNode("CJDHMainUI/CCJDHTableCellUI.json");

    //Node中取出Layout对象,这个时候才可以使用clone

    Layout* out = dynamic_cast<Layout*>(wid->getChildByName("Panel"));

    lv->addChild(out->clone());

经过这一翻折腾,总算是问题解决了。今天遇到这一堆的问题,又开始让我有怀念起苹果的TableView了。虽然这个用起来没有cocos2d-x新出的这个ListView编辑器方便,但显示速度快,不会卡顿,并且使用方法从来都没有改变过,所有的api也始终如一。其实有的时候新工具不一定就能增加工作效率,大部分的时间都用在了学习新工具上了。那就没有时间来作产品设计了。如果其他人愿意,我宁愿用回cocos2d-x 2.1.5这个版本,或者使用cocos2d-iphone的Objective-C的原始版本,不使用任何UI编辑器,一切都用代码来写。但有时候作事情不由自已,谁让咱是给别人打工的码农呢。

下边是,加载正常的ListView.有了这个之后,我们对ListView中的各个控件操作起来也会方便很多。

关于cocos Studio for mac中ListView加载 - ♂苹果 - 眼睛想旅行

 害死人的编辑器。一个工具还没有开始上手,新的东西又出来了,使用方法还完全不一样。如果我是老板,我宁愿自已打造自已的编辑器。

  评论这张
 
阅读(1397)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017