守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 862|回复: 0

[技术资料] 2dx增加GUI控件

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51788
    钢镚
    1422

    开源英雄守望者

    发表于 2015-1-16 13:50:11 | 显示全部楼层 |阅读模式

    今天给cocos2dx2.2.3的cocostudio GUI增加遮罩控件,发现步骤还挺多.这里记录一下(省去编写代码的部分):

    增加控件相关pkg文件

    代码编写完成后,我把代码放到extensions\CocoStudio\GUI文件夹下.这个文件夹是cocostudio用来存放UI控件的默认文件夹.然后在文件夹tools\tolua++中增加控件pkg文件,例如我增加了UIBigMap.pkg,把需要导出给外界使用的函数从控件头文件中复制到pkg中.pkg的写法参照同文件夹下的其他pkg.


    修改basic_cocostudio.lua代码

    在basic_cocostudio.lua文件的CCObjectTypes数组中增加我们的控件名称例如我的:

    1. <font color="rgb(51, 51, 51)">local CCObjectTypes = {
    2.     ...,
    3.     "UIBigMap",
    4.     ...,
    5. }</font>
    复制代码
    在cocostudio.pkg中增加pkg文件引用需要把我们的控件pkg文件加入到cocostudio.pkg中,例如:
    1. $#include "LuaCocoStudio.h"
    2. ...
    3. $pfile "UIBigMap.pkg"
    4. ...
    复制代码
    执行build_cocostudio.bat

    这个时候执行tulua++文件夹下的脚本文件build_cocostudio.bat生成LuaCocoStudio.cpp

    复制 LuaCocoStudio.cpp 到 lua\cocos2dx_support

    把上一步生成的LuaCocoStudio.cpp复制到文件夹lua\cocos2dx_support中导出给lua使用.

    cocosGUI.h头文件中增加控件引用

    需要在这个头文件中增加include,例如:
    1. ...
    2. #include "../BigMap/UIBigMap.h"
    3. ...
    复制代码
    如果不加,会引发控件找不到的错误.
    遇到的问题
    由于GUI的触摸处理全部走TouchGroup的流程,所以在控件中使用addChild千万要小心,如果控件增加的节点不希望侦听触摸事件或者不是Widget类型的对象,则应该使用如下的方式增加:
    1. //m_pBigMapNode 为我加在控件之上的节点,不需要交互
    2. CCNode::addChild( m_pBigMapNode,0,0);
    复制代码
    或者修改UILayout的addChild,通过C++的类型限制特性 限制Layout的addChild只能加Widget类型的对象.
    1. //UILayout类 的addChild修改为一下方式
    2. void Layout::addChild(Widget *child)
    3. {
    4.     Widget::addChild(child);
    5. }

    6. void Layout::addChild(Widget * child, int zOrder)
    7. {
    8.     Widget::addChild(child, zOrder);
    9. }

    10. void Layout::addChild(Widget *child, int zOrder, int tag)
    11. {
    12.     supplyTheLayoutParameterLackToChild(static_cast(child));
    13.     Widget::addChild(child, zOrder, tag);
    14.     _doLayoutDirty = true;
    15. }
    复制代码


    本文来自:http://shadowkong.com/archives/1785



    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2019-11-18 16:35 , Processed in 0.043528 second(s), 33 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表