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