zoukankan      html  css  js  c++  java
  • 修改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的值,尼玛今天太累,不想继续写了。

  • 相关阅读:
    leetcode 34 rust
    leetcode 2 rust
    leetcode 1 rust
    leetcode 20 rust
    leetcode 287 rust
    leetcode 18 rust
    lottery抽奖
    webpack
    webpack(7)-生产环境
    webpack(6)-模块热替代&tree shaking
  • 原文地址:https://www.cnblogs.com/alex-zhou/p/4369203.html
Copyright © 2011-2022 走看看