需求:在cocos2dx引擎中,button的點擊區域和button圖片的大小是同樣的,可是我須要修改可點擊區域的大小和位置,須要修改引擎源碼;函數
button提供的接口中並無和touch相關,button繼承至widge,在widget的接口中,找到hitTest(),ok,就是這個接口;ui
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成功。lua
考慮到引擎的穩定性,儘可能仍是不要對源碼作大的修改,個人思路是僅僅是在原來的結構上加一個rect,默認rect(0,0,0,0),當調用setClickArea()接口的時候用本身的rect進行判斷,不然仍是繼續使用源碼的判斷方式;spa
修改完源碼還要把接口倒到lua中使用,libLua庫已經很好的支持瞭如何把C++倒給lua,widget的接口在lua_cocos2dx_ui_auto.cppcode
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的值,尼瑪今天太累,不想繼續寫了。對象