修改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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值