
转自:http://segmentfault.com/blog/codecabin/1190000000593010
目前正在和实训的小组成员一起做一款手机2D游戏,我们采用了Cocos2d-x进行开发。之前虽然早有耳闻,这次却是第一次认真地学习和使用Cocos2d-x。最开始的几天就是在不停的看文档和爬坑。其中一个坑就是Cocostudio这货。官网的文档滞后而且不够详细,为了弄清楚,借鉴了很多博客,也阅读了示例代码。
本人Cocos2d-x的版本是3.1,Cocostudio的版本是1.5.
Cocostudio目前的功能包括UI编辑器、动画编辑器、场景编辑器和数据编辑器。数据编辑器没有涉及到,就不说了。剩下三者中主要讲下导入UI编辑器的资源。
UI编辑器导出的文件包括一个.ExportJson文件,一个.pList文件和一个.png文件。Cocostudio中文官网中说的是touchGroup,英文官网中是UILayer,可是都已经不存在了。UILayer变成了Layer,现在也可以不创建Layer,直接加到场景上面。所以代码可以这样:
Node *pNode = GUIReader::getInstance()->WidgetFromJsonfile("test.ExportJson");this->addChild(pNode);
下面就可以用getChildByTag来获取组件了。不过getChildByTag貌似只能按照树的结构一层层照下来,显得很麻烦,而且不能按照名字来取。所以,现在可以用ui中的Helper直接从树中获取组件,用name或者tag。但seekWidgetByTag和seekWidgetByname的第一个参数是Widget类型,需要将pNode转成Widget类型。(从.ExportJson文件可以看出来,pNode本来就是一个Widget类型的树)
button *button = (button*)(ui::Helper::seekWidgetByname(pNode,"button"));
顺便附上绑定事件监听的代码,使看到的人免去寻找之苦。
button->addtouchEventListener(CC_CALLBACK_2(MainScene::touchEvent,this)); touchEvent是自己写的方法。这个方法大致是如下用法,注意pSender和type的使用。
voID SingleMenuScene::selectEvent(Ref *pSender,Widget::touchEventType type){ switch(type) { case Widget::touchEventType::ENDED: GameSetting::Map map = GameSetting::Map::DEFAulT; if(pSender == defaultBtn) { map = GameSetting::Map::DEFAulT; } else if(pSender == sNowBtn) { map = GameSetting::Map::SNow; } Scene *game = BattleScene::createScene(map); TransitionScene *Transition = TransitionFade::create(0.5,game); Director::getInstance()->replaceScene(Transition); }}
导入动画编辑器的动画的代码如下:
CCArmatureDataManager::sharedArmatureDataManager()->addArmaturefileInfo("Animation0.png",152)">"Animation0.pList",152)">"Animation.ExportJson");CCArmature *armature = CCArmature::create("Animation");armature->getAnimation()->playByIndex(0);armature->setScale(0.5f);armature->setposition(ccp(visibleSize.wIDth * 0.5));this->addChild(armature);
导入场景编辑器的场景的代码如下:
Node* pNode = SceneReader::getInstance()->createNodeWithScenefile("scene.ExportJson"); 这个读出的总结Node貌似不能转成Widget,因为它不仅包括UI组件还有动画等资源。获取组件和绑定事件监听可以这样写:Comrender *render = (Comrender*)(pNode->getChildByTag(10010)->getComponent("GUIComponent")); Widget *Widget = (Widget*)(render->getNode()); Widget->addtouchEventListener(CC_CALLBACK_2(MainScene::touchEvent,0)">this));
以上是内存溢出为你收集整理的Cocos2d-x 3.x开发——导入Cocostudio资源全部内容,希望文章能够帮你解决Cocos2d-x 3.x开发——导入Cocostudio资源所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)