• 修改button的可点击区域


    需求:在cocos2dx引擎中,button的点击区域和button图片的大小是一样的,但是我需要修改可点击区域的大小和位置,需要修改引擎源码;

    button提供的接口中并没有和touch相关,button继承至widge,在widget的接口中,找到hitTest(),ok,就是这个接口;

     1 bool Widget::hitTest(vec2 &pt) 
     2 {
     3     vec2 nsp = convertToNodeSpace(pt);
     4     Rect bb;
     5     bb.size = _contentSize;
     6     if (bb.containsPoint(nsp))
     7     {
     8        return true;
     9     }  
    10 }

    源码很简单,如果rect bb包含点击的点,那么就是hitTest成功。

    考虑到引擎的稳定性,尽量还是不要对源码做大的修改,我的思路是仅仅是在原来的结构上加一个rect,默认rect(0,0,0,0),当调用setClickArea()接口的时候用自己的rect进行判断,否则还是继续使用源码的判断方式;

    修改完源码还要把接口倒到lua中使用,libLua库已经很好的支持了如何把C++倒给lua,widget的接口在lua_cocos2dx_ui_auto.cpp

    1 int  lua_cocos2dx_ui_widget_setClickArea(lua_State * tolua_S)
    2 {
    3      cocos2d::ui::widget * obj = nullptr;
    4      obj = (cocos2d::ui::widget *) tolua_tousertype(tolua_S, 1, 0);
    5      cocos2d::Rect arg0;
    6      luaval_to_rect(tolua_S, 2, &arg0);
    7     obj->setClickArea(arg0);
    8     return 0;     
    9 }

    注册C++函数给lua的写法,从lua状态机中取第一个参数是对象,第二个参数是rect的值,尼玛今天太累,不想继续写了。

  • 相关阅读:
    C. Dima and Salad 背包好题
    centos7下查看cup核数
    code码说明
    数据库慢查询
    centos7重启Mysql命令
    many connection errors,更改max_connection_errors的值
    CentOS7 linux下yum安装redis以及使用
    django Warning: (3135, "'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes
    linux命令
    linux命令解压压缩rar文件的详细步骤
  • 原文地址:https://www.cnblogs.com/alex-zhou/p/4369203.html
Copyright © 2020-2023  润新知