Cocos2d-x V3.2+Cocos Studio1.6 实现一个简单的uibutton点击功能

前端之家收集整理的这篇文章主要介绍了Cocos2d-x V3.2+Cocos Studio1.6 实现一个简单的uibutton点击功能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

好久没写博客

这几天在学习cocos studio,这个软件能够非常方便的设计游戏的一些界面,并导入到cocos2dx中,今天就用按钮来做个例子

首先我们打开Cocos Studio1.6,选择UIEditor,进去后我们发现有很多的示例,我们就悬着一个叫demologin的示例


选择好后我们发现如下图,简单介绍了下功能


这里我们选中那个login按钮,发现这个按钮的实例名叫login_Button,这个名字我们等会代码里要用,然后我们保存一下

在保存路径下找到这个工程文件夹,打开


有这些文件,我们把Json和Resources文件夹下的资源复制到cocos2dx中的资源文件夹中

这个json文件就是记录了这个widget的各种数据,cocos2dx会解析这些数据然后还原这个界面,感兴趣的可以打开研究下

好了到了代码阶段,我就简单的创建了个helloworld,但是我们要把三个外部的工程库导入这个解决方案并引用并在头文件中包含

好了,下面就是代码

  1. //HelloWorldScene.h
  2. #ifndef __HELLOWORLD_SCENE_H__
  3. #define __HELLOWORLD_SCENE_H__
  4.  
  5. #include "cocos2d.h"
  6. //导入这三个头文件
  7. //注意在这个工程的属性->C\C++ ->常规->附加包含目录 中添加这三个文件的路径
  8. #include "cocostudio/CocoStudio.h"
  9. #include "extensions/cocos-ext.h"
  10. #include "ui/CocosGUI.h"
  11.  
  12. class HelloWorld : public cocos2d::Layer
  13. {
  14. public:
  15. // there's no 'id' in cpp,so we recommend returning the class instance pointer
  16. static cocos2d::Scene* createScene();
  17.  
  18. // Here's a difference. Method 'init' in cocos2d-x returns bool,instead of returning 'id' in cocos2d-iphone
  19. virtual bool init();
  20. // a selector callback
  21. void menuCloseCallback(cocos2d::Ref* pSender,cocos2d::ui::TouchEventType type);
  22. // implement the "static create()" method manually
  23. CREATE_FUNC(HelloWorld);
  24. };
  25.  
  26. #endif // __HELLOWORLD_SCENE_H__

  1. //HelloWorldScene.cpp
  2. #include "HelloWorldScene.h"
  3.  
  4. USING_NS_CC;
  5. //这个是命名空间
  6. using namespace cocostudio;
  7. using namespace ui;
  8.  
  9. Scene* HelloWorld::createScene()
  10. {
  11. // 'scene' is an autorelease object
  12. auto scene = Scene::create();
  13. // 'layer' is an autorelease object
  14. auto layer = HelloWorld::create();
  15.  
  16. // add layer as a child to scene
  17. scene->addChild(layer);
  18.  
  19. // return the scene
  20. return scene;
  21. }
  22.  
  23. // on "init" you need to initialize your instance
  24. bool HelloWorld::init()
  25. {
  26. //////////////////////////////
  27. // 1. super init first
  28. if ( !Layer::init() )
  29. {
  30. return false;
  31. }
  32. Size visibleSize = Director::getInstance()->getVisibleSize();
  33. Vec2 origin = Director::getInstance()->getVisibleOrigin();
  34.  
  35. //获取我们的Cocos Studio UIdemo
  36. //这里我们创建了一个widget,这里说明下貌似cocostudio有自己的一套代码风格和api
  37. //有些功能能和cocos2dx混合着用
  38. //这里的widget有点类似一个layer,反正我是这样理解的
  39. ui::Widget * pNode=cocostudio::GUIReader::getInstance()->widgetFromJsonFile("DemoLogin.json");
  40. this->addChild(pNode);
  41.  
  42. //我们从widget中找到那个button的名字然后实例出来(跟android有点像)
  43. ui::Button * button=(ui::Button *)ui::Helper::seekWidgetByName(pNode,"login_Button");
  44. //给这个按钮增加一个touch的侦听(这边就和cocos2dx有不同了)
  45. button->addTouchEventListener(this,toucheventselector(HelloWorld::menuCloseCallback));
  46.  
  47. return true;
  48. }
  49.  
  50. //这里是侦听回调函数
  51. void HelloWorld::menuCloseCallback(cocos2d::Ref* pSender,ui::TouchEventType type)
  52. {
  53. //cocostudio的侦听,你可以根据type的类型来执行相应的代码
  54. //这里用switch来判断,非常的简洁明了
  55. switch (type)
  56. {
  57. case ui::TouchEventType::TOUCH_EVENT_BEGAN:
  58. {
  59. log("touch began");
  60. break;
  61. }
  62. case ui::TouchEventType::TOUCH_EVENT_MOVED:
  63. {
  64. log("touch moved");
  65. break;
  66. }
  67. case ui::TouchEventType::TOUCH_EVENT_ENDED:
  68. {
  69. log("touch ended");
  70. break;
  71. }
  72. case ui::TouchEventType::TOUCH_EVENT_CANCELED:
  73. {
  74. log("touch canceled");
  75. break;
  76. }
  77. default:
  78. break;
  79. }
  80. }

运行


点击按钮测试下


好的,完成

猜你在找的Cocos2d-x相关文章