修改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的值,尼瑪今天太累,不想繼續寫了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM