修改button的可點選區域

weixin_30788239發表於2020-04-05

需求:在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

相關文章