这篇的内容非常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. 第六篇 ANDROID窗口系统机制之显示机制

    第六篇 ANDROID窗口系统机制之显示机制 ANDROID的显示系统是整个框架中最复杂的系统之一,涉及包括窗口管理服务.VIEW视图系统.SurfaceFlinger本地服务.硬件加速等.窗口管理服 ...

  2. [Android Pro] Android 必知必会-使用 supportV4 的 RoundedBitmapDrawable 实现圆角

    RoundedBitmapDrawable 是 supportV4 下的一个类,有了它,显示圆角和圆形图片的情况下就不需要额外的第三方类库了,还能和各种图片加载库配合使用. 背景 今天无意间看到一段实 ...

  3. HDU 1232 (13.10.31)

    畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  4. GSM模块_STM32实现GPRS与服务器数据传输经验总结

    硬件环境 MCU:STM32F103RET6 (调试器:J-Link) GSM模块:Ai-Thinker_A6 (安信可)(还需要配一个串口打印工具,当初选这个模块纯粹是因为价格是最便宜的) ---- ...

  5. 解决 PowerDesigner 错误 The generation has been cancelled because errors have been found by the check model.

    在通过概念数据模型生成为物理数据模型时出现错误“The generation has been cancelled because errors have been found by the chec ...

  6. 零基础学python-3.5 内存管理

    * 变量无需事先声明 * 变量无需指定类型 * 程序猿不用关系内存管理 * 变量名会被回收 * del能够直接释放资源 1.python使用的是引用调用,而不是值调用,他使用的回收算法是引用计数算法, ...

  7. 使用mocha测试

    学习了MOCHA官网的示例,将学习成果记录一下.[原文+例子:使用mocha测试] mocha是什么 Mocha是一个跑在node和浏览器上的javascript测试框架,让异步测试变得简单有趣, 并 ...

  8. SQLServer2008备份时发生无法打开备份设备

    如下图所示,在执行SQL一个简单的备份命令时发生下面的情况 问题分析: 1:可能是文件夹目录权限问题 2:可能是登录SQLServer服务器用户策略问题 于是就查看了E:\dw_backup的文件夹权 ...

  9. phpsso 与 Discuz!

    经过测试仍然有问题,phpcms登陆,论坛可以实现同步登陆,但论坛登陆phpcms无法同步登陆.但总体来说也能使用了.如果有更好的方法欢迎补充. 整合原理: UCenter 作服务端:phpsso 与 ...

  10. Unity for Windows: III–Publishing your unity game to Windows Phone Store

    原地址:http://digitalerr0r.wordpress.com/2013/08/27/unity-for-windows-iiipublishing-to-windows-phone-st ...