修改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的值,尼玛今天太累,不想继续写了。

原文地址:https://www.cnblogs.com/alex-zhou/p/4369203.html