转载请注明,原文地址: http://www.benmutou.com/archives/918
文章来源:笨木头与游戏开发
 

 

这篇的内容很简单,获取UI控件,然后使用它。

 

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

现在要用上了。

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

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

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

根据名字查找控件

首先给TollgateScene再include一些头文件,不然等会编译又报错了:
[cce_cpp]
#include "editor-support/cocostudio/CCSGUIReader.h"

#include "cocostudio/CocoStudio.h"

#include "ui/CocosGUI.h"

using namespace cocos2d::ui;

using namespace cocostudio; [/cce_cpp]
 

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

 

然后,获取UI控件的方法如下,继续修改createOprUI函数:
[cce_cpp]
void TollgateScene::createOprUI()

{

    auto UI = cocostudio::GUIReader::getInstance()->widgetFromJsonFile("OprUI_1.ExportJson");

    this->addChild(UI);

 

    /* 获取按钮对象 */

    Button* rightBtn = (Button*)Helper::seekWidgetByName(UI, "rightBtn");

    Button* quickMoveBtn = (Button*)Helper::seekWidgetByName(UI, "quickMoveBtn");

    Button* leftBtn = (Button*)Helper::seekWidgetByName(UI, "leftBtn");

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

 

很简单,不多解释喇~

 

添加按钮回调事件

OK,最后一步了,现在按钮摆在那里什么都做不了,我们给按钮添加回调事件~

 

先给TollgateScene添加三个函数声明:
[cce_cpp]
    void moveToLeft(Ref* sender, TouchEventType type);

    void moveToRight(Ref* sender, TouchEventType type);

    void quickMove(Ref* sender, TouchEventType type); [/cce_cpp]
这是Button点击事件回调时所需要的函数格式。

 

然后,继续修改createOprUI函数:
[cce_cpp]
void TollgateScene::createOprUI()

{

    auto UI = cocostudio::GUIReader::getInstance()->widgetFromJsonFile("OprUI_1.ExportJson");

    this->addChild(UI);

 

    /* 获取按钮对象 */

    Button* rightBtn = (Button*)Helper::seekWidgetByName(UI, "rightBtn");

    Button* quickMoveBtn = (Button*)Helper::seekWidgetByName(UI, "quickMoveBtn");

    Button* leftBtn = (Button*)Helper::seekWidgetByName(UI, "leftBtn");

 

    /* 添加按钮回调事件 */

    leftBtn->addTouchEventListener(this, toucheventselector(TollgateScene::moveToLeft));

    rightBtn->addTouchEventListener(this, toucheventselector(TollgateScene::moveToRight));

    quickMoveBtn->addTouchEventListener(this, toucheventselector(TollgateScene::quickMove));

} [/cce_cpp]
 

利用addTouchEventListener函数就可以绑定按钮的回调事件了~

 

最后了,看看三个回调函数的实现:
[cce_cpp]
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;

 

    }

} [/cce_cpp]

是不是感觉有点小复杂?

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

如果大家觉得麻烦,可以自己改源码,添加一些函数,在绑定按钮事件的时候,可以指定绑定哪种事件。以及可以使用std::function来作为参数,这样很方便,当然,跑题了。为了避免大家混乱,这里就不介绍了。

 

运行测试

OK,现在大家运行游戏,然后点击这三个操作按钮,看看主角是不是能左右移动以及放屁(向下冲)吧~

 

 

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

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

惩罚的方式就是加血~

 

 
72 条评论
  • hyy 2016-01-28 15:55:00

    0x10871D44 (libcocos2d.dll) (do_not_save_me.exe 中)处的第一机会异常: 0xC0000005: 写入位置 0x0000035C 时发生访问冲突。
    0x10871D44 (libcocos2d.dll) (do_not_save_me.exe 中)处有未经处理的异常: 0xC0000005: 写入位置 0x0000035C 时发生访问冲突。
    为什么会这样.....
    0回复
    • QZBYSZYK改变 2016-09-23 18:23:07

      你用下木头老师的UI试试,我也遇到同样的问题,可能是cocosstdio导出文件没覆盖原文件(我是按钮名字改完没覆盖),并放到要使用项目的resourse下
      0回复
  • 水影 2015-10-08 20:02:30

    我的主角,慢慢移动的时候,为什么为突然一下跑到屏幕外面?
    0回复
    • 博主 糟糕_树叶的mut 2015-10-09 07:57:30

      以我能理解的可能是,给主角施加的力太大的时候,会发生这种“穿墙”的现象。而你的是慢慢移动,我就毫无头绪了
      0回复
  • skype download for windows 7 2015-03-11 09:40:33

    skype download for windows 7

    skype free download
    0回复
  • javascript 2015-03-10 06:16:33

    java download

    javascript
    0回复
  • firefox download windows 7 2015-03-09 13:07:14

    firefox download

    download mozilla
    0回复
  • download google chrome 2015-03-09 05:49:15

    Chrome Download

    Google Chrome Download Free
    0回复
  • Vanessa Smith 2015-03-08 06:58:25

    I liked your blog very much.

    I want to thank you for the contribution.
    0回复
  • 丁力 2014-12-17 13:02:30

    一知半解,不要出啥书 祸害人了。
    0回复
  • freedomtnt 2014-11-02 14:19:20

    求救.我按第4章节把项目依赖,引用,附加包含目录都设好了,还是没用fatal error C1083: 无法打开包括文件:“cocostudio/DictionaryHelper.h”求教木头,这个问题怎么解决
    0回复
    • 博主 糟糕_树叶的mut 2014-11-02 19:48:39

      你试试按第五篇后面说的那个方法,看看能不能解决~
      0回复
  • 吾卟昰好人 2014-09-22 18:35:06

    阿木木 什么时候出新书啊
    0回复
    • 博主 糟糕_树叶的mut 2014-09-22 19:27:00

      应该9月底或者10月几号的样子,新书就能买到了~(也不算新书,是原书的升级版,升级为3.0,然后加了一些新内容)
      0回复
发表评论
粤ICP备16043700号

本博客基于 BlazorAnt Design Blazor 开发