Cocos2d-x3.0游戏实例之《别救我》第六篇——从代码中获取UI控件
这篇的内容非常easy,获取UI控件,然后使用它。
还记得我们在UI编辑器中给三个button分别命名了吧?
如今要用上了。
笨木头花心贡献,啥?花心?不呢,是用心~
转载请注明,原文地址: http://www.benmutou.com/blog/archives/918
文章来源:笨木头与游戏开发
依据名字查找控件
首先给TollgateScene再include一些头文件,不然等会编译又报错了:
- #include "editor-support/cocostudio/CCSGUIReader.h"
- #include "cocostudio/CocoStudio.h"
- #include "ui/CocosGUI.h"
- using namespace cocos2d::ui;
- using namespace cocostudio;
上面就是比較完整的使用UI所须要用到的头文件了。
然后,获取UI控件的方法例如以下,继续改动createOprUI函数:
- void TollgateScene::createOprUI()
- {
- auto UI = cocostudio::GUIReader::getInstance()->widgetFromJsonFile("OprUI_1.ExportJson");
- this->addChild(UI);
- /* 获取button对象 */
- Button* rightBtn = (Button*)Helper::seekWidgetByName(UI, "rightBtn");
- Button* quickMoveBtn = (Button*)Helper::seekWidgetByName(UI, "quickMoveBtn");
- Button* leftBtn = (Button*)Helper::seekWidgetByName(UI, "leftBtn");
- }
Helper::seekWidgetByName函数会从UI里面找控件,一层层的找。父控件找不到,就找子控件。如此递归。最后找的名字相符的控件,返回这个控件对象。
非常easy,不多解释喇~
加入button回调事件
OK,最后一步了,如今button摆在那里什么都做不了,我们给button加入回调事件~
先给TollgateScene加入三个函数声明:
- void moveToLeft(Ref* sender, TouchEventType type);
- void moveToRight(Ref* sender, TouchEventType type);
- void quickMove(Ref* sender, TouchEventType type);
这是Button点击事件回调时所须要的函数格式。
然后。继续改动createOprUI函数:
- void TollgateScene::createOprUI()
- {
- auto UI = cocostudio::GUIReader::getInstance()->widgetFromJsonFile("OprUI_1.ExportJson");
- this->addChild(UI);
- /* 获取button对象 */
- Button* rightBtn = (Button*)Helper::seekWidgetByName(UI, "rightBtn");
- Button* quickMoveBtn = (Button*)Helper::seekWidgetByName(UI, "quickMoveBtn");
- Button* leftBtn = (Button*)Helper::seekWidgetByName(UI, "leftBtn");
- /* 加入button回调事件 */
- leftBtn->addTouchEventListener(this, toucheventselector(TollgateScene::moveToLeft));
- rightBtn->addTouchEventListener(this, toucheventselector(TollgateScene::moveToRight));
- quickMoveBtn->addTouchEventListener(this, toucheventselector(TollgateScene::quickMove));
- }
利用addTouchEventListener函数就能够绑定button的回调事件了~
最后了。看看三个回调函数的实现:
- void TollgateScene::moveToLeft(Ref* sender, TouchEventType type)
- {
- switch (type)
- {
- case TOUCH_EVENT_ENDED:
- m_player->moveToLeft();
- break;
- }
- }
- void TollgateScene::moveToRight(Ref* sender, TouchEventType type)
- {
- switch (type)
- {
- case TOUCH_EVENT_ENDED:
- m_player->moveToRight();
- break;
- }
- }
- void TollgateScene::quickMove(Ref* sender, TouchEventType type)
- {
- switch (type)
- {
- case TOUCH_EVENT_ENDED:
- m_player->quickMove();
- break;
- }
- }
是不是感觉有点小复杂?
应该说。有点小麻烦,由于button事件绑定的时候。是没有区分“按下”、“移动”、“松开”的,所以我们要自己推断一下,TOUCH_EVENT_ENDED就是button点击,然后松开的时候的事件。
假设大家认为麻烦,能够自己改源代码,加入一些函数,在绑定button事件的时候。能够指定绑定哪种事件。
以及能够使用std::function来作为參数,这样非常方便,当然,跑题了。为了避免大家混乱,这里就不介绍了。
执行測试
OK,如今大家执行游戏。然后点击这三个操作button,看看主角是不是能左右移动以及放屁(向下冲)吧~
下一篇,加入碰撞检測,让主角碰到墙壁之后,进行加血。
没错,就是加血。不是扣血~由于《别救我》胜利的条件是血量为0。碰到墙是要惩处的~
惩处的方式就是加血~
Cocos2d-x3.0游戏实例之《别救我》第六篇——从代码中获取UI控件的更多相关文章
- Cocos2d-x3.0游戏实例《不要救我》第十篇(结束)——使用Json配置数据类型的怪物
如今我们有2种类型的怪物,并且创建的时候是写死在代码里的,这是要作死的节奏~ 所以.必须可配置.不然会累死人的. ; i < size; ++i) { int id = root[i][&quo ...
- Cocos2d-x3.0游戏实例《不要救我》第一章——前言
我们可以学习? 这是一个非常easy游戏.但更多的东西用(对于初学者).至少,对于它的一个例子,有点多. 笨木头花心贡献.啥?花心?不呢.是用心~ 转载请注明,原文地址:http://www.benm ...
- Cocos2d-x3.0游戏实例《不要救我》三——背景滚动周期
好.让我们来解释一下这个无限循环滚动的背景.这方面的知识一直讲到烂.我以前的文章还介绍了.所以不是那么特别清楚. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址:http://www. ...
- (转).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 ...
- Cocos2d-x3.0 从代码中获取cocostudio编辑的UI控件
依据名字查找控件 须要包括的头文件及名字空间: #include "cocostudio/CocoStudio.h" #include "ui/CocosGUI.h&qu ...
- Cocos2d-x3.0游戏实例之《别救我》第八篇——TiledMap实现关卡编辑器
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/musicvs/article/details/25368273 好吧.我真心全然搞不懂.我如今仅仅只 ...
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》 第六步--金币&岩石加入而且管理
说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...
- Android4.0 -- UI控件之 Menu 菜单的的使用(三)
上一讲 [Android 开发]:UI控件之 Menu 菜单的的使用(二) 我们讲解了创建上下文菜单的第一种使用方式:Creating a floating context menu [创建悬浮的上下 ...
- FineUI(专业版)v3.2.0 发布(ASP.NET UI控件库)!
+2016-08-20 v3.2.0 +表格增强. +表格列RenderField增加属性ClientHtmlEncode,用于在客户端进行HTML编码. -增加示例:单元格编辑->杂项-> ...
随机推荐
- 第六篇 ANDROID窗口系统机制之显示机制
第六篇 ANDROID窗口系统机制之显示机制 ANDROID的显示系统是整个框架中最复杂的系统之一,涉及包括窗口管理服务.VIEW视图系统.SurfaceFlinger本地服务.硬件加速等.窗口管理服 ...
- [Android Pro] Android 必知必会-使用 supportV4 的 RoundedBitmapDrawable 实现圆角
RoundedBitmapDrawable 是 supportV4 下的一个类,有了它,显示圆角和圆形图片的情况下就不需要额外的第三方类库了,还能和各种图片加载库配合使用. 背景 今天无意间看到一段实 ...
- HDU 1232 (13.10.31)
畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- GSM模块_STM32实现GPRS与服务器数据传输经验总结
硬件环境 MCU:STM32F103RET6 (调试器:J-Link) GSM模块:Ai-Thinker_A6 (安信可)(还需要配一个串口打印工具,当初选这个模块纯粹是因为价格是最便宜的) ---- ...
- 解决 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 ...
- 零基础学python-3.5 内存管理
* 变量无需事先声明 * 变量无需指定类型 * 程序猿不用关系内存管理 * 变量名会被回收 * del能够直接释放资源 1.python使用的是引用调用,而不是值调用,他使用的回收算法是引用计数算法, ...
- 使用mocha测试
学习了MOCHA官网的示例,将学习成果记录一下.[原文+例子:使用mocha测试] mocha是什么 Mocha是一个跑在node和浏览器上的javascript测试框架,让异步测试变得简单有趣, 并 ...
- SQLServer2008备份时发生无法打开备份设备
如下图所示,在执行SQL一个简单的备份命令时发生下面的情况 问题分析: 1:可能是文件夹目录权限问题 2:可能是登录SQLServer服务器用户策略问题 于是就查看了E:\dw_backup的文件夹权 ...
- phpsso 与 Discuz!
经过测试仍然有问题,phpcms登陆,论坛可以实现同步登陆,但论坛登陆phpcms无法同步登陆.但总体来说也能使用了.如果有更好的方法欢迎补充. 整合原理: UCenter 作服务端:phpsso 与 ...
- 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 ...