这篇的内容非常easy,获取UI控件,然后使用它。

还记得我们在UI编辑器中给三个button分别命名了吧?

如今要用上了。

笨木头花心贡献,啥?花心?不呢,是用心~

转载请注明,原文地址: http://www.benmutou.com/blog/archives/918

文章来源:笨木头与游戏开发

依据名字查找控件

首先给TollgateScene再include一些头文件,不然等会编译又报错了:

  1. #include "editor-support/cocostudio/CCSGUIReader.h"
  2. #include "cocostudio/CocoStudio.h"
  3. #include "ui/CocosGUI.h"
  4. using namespace cocos2d::ui;
  5. using namespace cocostudio;

上面就是比較完整的使用UI所须要用到的头文件了。

然后,获取UI控件的方法例如以下,继续改动createOprUI函数:

  1. void TollgateScene::createOprUI()
  2. {
  3. auto UI = cocostudio::GUIReader::getInstance()->widgetFromJsonFile("OprUI_1.ExportJson");
  4. this->addChild(UI);
  5. /* 获取button对象 */
  6. Button* rightBtn = (Button*)Helper::seekWidgetByName(UI, "rightBtn");
  7. Button* quickMoveBtn = (Button*)Helper::seekWidgetByName(UI, "quickMoveBtn");
  8. Button* leftBtn = (Button*)Helper::seekWidgetByName(UI, "leftBtn");
  9. }

Helper::seekWidgetByName函数会从UI里面找控件,一层层的找。父控件找不到,就找子控件。如此递归。最后找的名字相符的控件,返回这个控件对象。

非常easy,不多解释喇~

加入button回调事件

OK,最后一步了,如今button摆在那里什么都做不了,我们给button加入回调事件~

先给TollgateScene加入三个函数声明:

  1. void moveToLeft(Ref* sender, TouchEventType type);
  2. void moveToRight(Ref* sender, TouchEventType type);
  3. void quickMove(Ref* sender, TouchEventType type);

这是Button点击事件回调时所须要的函数格式。

然后。继续改动createOprUI函数:

  1. void TollgateScene::createOprUI()
  2. {
  3. auto UI = cocostudio::GUIReader::getInstance()->widgetFromJsonFile("OprUI_1.ExportJson");
  4. this->addChild(UI);
  5. /* 获取button对象 */
  6. Button* rightBtn = (Button*)Helper::seekWidgetByName(UI, "rightBtn");
  7. Button* quickMoveBtn = (Button*)Helper::seekWidgetByName(UI, "quickMoveBtn");
  8. Button* leftBtn = (Button*)Helper::seekWidgetByName(UI, "leftBtn");
  9. /* 加入button回调事件 */
  10. leftBtn->addTouchEventListener(this, toucheventselector(TollgateScene::moveToLeft));
  11. rightBtn->addTouchEventListener(this, toucheventselector(TollgateScene::moveToRight));
  12. quickMoveBtn->addTouchEventListener(this, toucheventselector(TollgateScene::quickMove));
  13. }

利用addTouchEventListener函数就能够绑定button的回调事件了~

最后了。看看三个回调函数的实现:

  1. void TollgateScene::moveToLeft(Ref* sender, TouchEventType type)
  2. {
  3. switch (type)
  4. {
  5. case TOUCH_EVENT_ENDED:
  6. m_player->moveToLeft();
  7. break;
  8. }
  9. }
  10. void TollgateScene::moveToRight(Ref* sender, TouchEventType type)
  11. {
  12. switch (type)
  13. {
  14. case TOUCH_EVENT_ENDED:
  15. m_player->moveToRight();
  16. break;
  17. }
  18. }
  19. void TollgateScene::quickMove(Ref* sender, TouchEventType type)
  20. {
  21. switch (type)
  22. {
  23. case TOUCH_EVENT_ENDED:
  24. m_player->quickMove();
  25. break;
  26. }
  27. }

是不是感觉有点小复杂?

应该说。有点小麻烦,由于button事件绑定的时候。是没有区分“按下”、“移动”、“松开”的,所以我们要自己推断一下,TOUCH_EVENT_ENDED就是button点击,然后松开的时候的事件。

假设大家认为麻烦,能够自己改源代码,加入一些函数,在绑定button事件的时候。能够指定绑定哪种事件。

以及能够使用std::function来作为參数,这样非常方便,当然,跑题了。为了避免大家混乱,这里就不介绍了。

执行測试

OK,如今大家执行游戏。然后点击这三个操作button,看看主角是不是能左右移动以及放屁(向下冲)吧~

下一篇,加入碰撞检測,让主角碰到墙壁之后,进行加血。

没错,就是加血。不是扣血~由于《别救我》胜利的条件是血量为0。碰到墙是要惩处的~

惩处的方式就是加血~

Cocos2d-x3.0游戏实例之《别救我》第六篇——从代码中获取UI控件的更多相关文章

  1. Cocos2d-x3.0游戏实例《不要救我》第十篇(结束)——使用Json配置数据类型的怪物

    如今我们有2种类型的怪物,并且创建的时候是写死在代码里的,这是要作死的节奏~ 所以.必须可配置.不然会累死人的. ; i < size; ++i) { int id = root[i][&quo ...

  2. Cocos2d-x3.0游戏实例《不要救我》第一章——前言

    我们可以学习? 这是一个非常easy游戏.但更多的东西用(对于初学者).至少,对于它的一个例子,有点多. 笨木头花心贡献.啥?花心?不呢.是用心~ 转载请注明,原文地址:http://www.benm ...

  3. Cocos2d-x3.0游戏实例《不要救我》三——背景滚动周期

    好.让我们来解释一下这个无限循环滚动的背景.这方面的知识一直讲到烂.我以前的文章还介绍了.所以不是那么特别清楚. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址:http://www. ...

  4. (转).NET 4.5中使用Task.Run和Parallel.For()实现的C# Winform多线程任务及跨线程更新UI控件综合实例

    http://2sharings.com/2014/net-4-5-task-run-parallel-for-winform-cross-multiple-threads-update-ui-dem ...

  5. Cocos2d-x3.0 从代码中获取cocostudio编辑的UI控件

    依据名字查找控件 须要包括的头文件及名字空间: #include "cocostudio/CocoStudio.h" #include "ui/CocosGUI.h&qu ...

  6. Cocos2d-x3.0游戏实例之《别救我》第八篇——TiledMap实现关卡编辑器

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/musicvs/article/details/25368273 好吧.我真心全然搞不懂.我如今仅仅只 ...

  7. cocos2d-x 3.0游戏实例学习笔记 《跑酷》 第六步--金币&amp;岩石加入而且管理

    说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...

  8. Android4.0 -- UI控件之 Menu 菜单的的使用(三)

    上一讲 [Android 开发]:UI控件之 Menu 菜单的的使用(二) 我们讲解了创建上下文菜单的第一种使用方式:Creating a floating context menu [创建悬浮的上下 ...

  9. FineUI(专业版)v3.2.0 发布(ASP.NET UI控件库)!

    +2016-08-20 v3.2.0 +表格增强. +表格列RenderField增加属性ClientHtmlEncode,用于在客户端进行HTML编码. -增加示例:单元格编辑->杂项-> ...

随机推荐

  1. java string(2)

    1. indexOf()函数是一个执行速度非常快的函数,可以用其与subString()实现高效的字符串分割,比内置的要高效. 2. charAt()方法也是高效率的函数,可以用其实现高效的start ...

  2. 跨域策略文件crossdomain.xml

    Web站点通过crossdomain.xml文件(放于站点根目录)配置提供允许的域跨域访问本域内容的权限 以土豆的为例: <cross-domain-policy> <allow-a ...

  3. python接口自动化7-参数关联

    前言 我们用自动化发帖之后,要想接着对这篇帖子操作,那就需要用参数关联了,发帖之后会有一个帖子的id,获取到这个id,继续操作传这个帖子id就可以了 (博客园的登录机制已经变了,不能用账号和密码登录了 ...

  4. Mac配置PHP开发环境

    安装环境如下: Mac OS 10.10.1 Apache 2.4.9 PHP 5.5.14 MySQL 5.6.22 Apache配置 在Mac OS 10.10.1中是自带Apache软件的,我们 ...

  5. xheditor

    完整按钮表 |:分隔符 /:强制换行 Cut:剪切 Copy:复制 Paste:粘贴 Pastetext:文本粘贴 Blocktag:段落标签 Fontface:字体 FontSize:字体大小 Bo ...

  6. [Linux] ubuntu下查看CHM的软件

    本文旨在介绍linux下的常见chm阅读软件及其安装,并针对一些问题给出解决方法. 一.CHMSEE 这个比较常见了,呵呵. 安装: sudo apt-get install chmsee 之后在应用 ...

  7. 2 cocos2dx 3.0 源码分析-Director

    Director 导演类, 这个类在整个引擎中担当着最重要的角色, 先看看它是如何初始化的,它共管理了哪些内容呢?    1初始化- 更新处理Scheduler   Scheduler 这个类负责用户 ...

  8. 模拟jQuery中的ready方法及实现按需加载css,js实例代码

    这篇文章介绍了模拟jQuery中的ready方法及实现按需加载css,js实例代码,有需要的朋友可以参考一下     一.ready函数的实现经常用jQuery类库或其他类库中的ready方法,有时候 ...

  9. SQL insert失败时也会造成自增长字段加1

    CREATE TABLE #test(id INT IDENTITY(1,1), NAME varchar(30)) INSERT #test(name)SELECT '41545' SELECT   ...

  10. ECharts学习总结(一):ECharts的第一个图表

    在进行echarts图表开发之前先要到echarts官网下载echarts的库文件,我下载的是echarts-2.2.7.然后把库文件放到工程文件web目录下.接下来进行第一个图表的显示步骤如下: 1 ...